Linux —— 进程管理

目录

一,进程介绍

二,进程使用

进程查看

通过系统调用获取进程标识符

通过系统调用创建进程 fork


一,进程介绍

        进程是正在执行的程序或命令,每个进程都是一个运行的实体或程序的执行实例,有自己的地址空间,并占用一定系统资源;从内核视角来看,是担当分配系统资源(CPU时间、内存)的实体;

  • 即在操作系统中,所有可执行的程序或命令都会产生进程(如简单的命令ls、touch等,执行完即结束,如httpd启动后就一直驻留在系统中的常驻内存进程);
  • 程序在执行时,执行者的权限和属性均会载入内存,操作系统会对进程分配一个ID,称为进程ID(即PID);
  • 进程可以产生新的进程,称此进程为父进程,新进程为子进程,如bash中执行的ls、touch等命令(bash父进程、ls/touch子进程);即子进程是依赖父进程产生的,若无父进程,子进程也就不存在;

进程控制块 PCB

        操作系统负责管理所有进程,包括进程的创建和消亡、进程状态的转换,及分配和回收进程所需的资源等;为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block);

  • PBC是进程实体的一部分,是操作系统中最重要的记录性数据结构;
  • PBC是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消;

        操作系统创建进程时,会额外申请一块内存(即进程控制块),用于存储、管理和控制进程的信息;由操作系统负责管理和维护,进程和进程控制块数量是对应的;Linux系统的PCB/task_struct;

  • task_struct(PCB的一种),描述进程的结构体;
  • task_struct 是Linux内核的一种数据结构,会被载入到内存并包含进程信息;
  • 运行在系统里的进程,都是以task_struct链表形式存在于内核内;对进程的管理,即是对此链表的增删查改;

task_struct 内容

  • 标识符,描述进程的唯一标识符,区别其他进程;
  • 状态,任务状态、退出代码、退出信息等;
  • 优先级,相当于其他进程的优先级;
  • 程序计数器,即将被执行下一指令的地址;
  • 内存指针,包括程序代码和进程相关数据的指针,及与其他进程共享的内存块指针;
  • 上下文数据,进程执行时寄存器中的数据;
  • I/O状态信息,包括显式的I/O请求,分配给进程的I/O设备和被进程使用的文件列表;
  • 记账信息,可能包括处理器时间总和,使用时钟数总和,时间限制,记账号等;
  • 其他信息;

注:管理的本质是先描述在组织;进程 = 程序 + PCB;

二,进程使用

        进程查看、系统调用获取标识符及创建子进程;

进程查看

  • 进程信息存于 /proc 文件夹,可通过此文件夹查看;
[wz@192 ~]$ ll /proc
total 0
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 10
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 11
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1180
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1182
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1183
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1187
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 1193
dr-xr-xr-x.  9 root           root                         0 7月   9 06:35 12
...
[wz@192 Desktop]$ ll /proc/59017
total 0
dr-xr-xr-x. 2 wz wz 0 7月  12 09:17 attr
-rw-r--r--. 1 wz wz 0 7月  12 09:17 autogroup
-r--------. 1 wz wz 0 7月  12 09:17 auxv
-r--r--r--. 1 wz wz 0 7月  12 09:17 cgroup
--w-------. 1 wz wz 0 7月  12 09:17 clear_refs
-r--r--r--. 1 wz wz 0 7月  12 06:32 cmdline
-rw-r--r--. 1 wz wz 0 7月  12 09:17 comm
-rw-r--r--. 1 wz wz 0 7月  12 09:17 coredump_filter
-r--r--r--. 1 wz wz 0 7月  12 09:17 cpuset
lrwxrwxrwx. 1 wz wz 0 7月  12 09:17 cwd -> /home/wz/Desktop
-r--------. 1 wz wz 0 7月  12 09:17 environ
lrwxrwxrwx. 1 wz wz 0 7月  12 06:32 exe -> /usr/bin/bash
  • 可通过命令top、ps,来查看大多数进程信息;

[wz@192 Desktop]$ ps axj | head -1 && ps axj | grep bashPPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND1    781    765    765 ?            -1 S        0   0:17 /bin/bash /usr/sbin/ksmtuned2107   2244   2244   2244 ?            -1 Ss    1000   0:02 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"59010  59017  59017  59017 pts/0     61546 Ss    1000   0:00 bash59017  61547  61546  59017 pts/0     61546 S+    1000   0:00 grep --color=auto bash

通过系统调用获取进程标识符

  • 进程id为PID;
  • 父进程id为PPID;
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;
}

通过系统调用创建进程 fork

        fork() 通过复制正在调用的进程,来创建新进程;新进程将作为子进程,是父进程的完全副本;

  • fork有两个返回值;
  • 子进程有自己唯一进程ID(PID);
  • 父子进程代码共享,数据各自开辟空间,采用写实拷贝;
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();printf("hello proc : %d!, ret: %d\n", getpid(), ret);sleep(1);return 0;
}
  • fork通常使用if进行分流;
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();if(ret < 0){perror("fork");return 1;}else if(ret == 0){ printf("I am child : %d!, ret: %d\n", getpid(), ret); //child}else{ printf("I am father : %d!, ret: %d\n", getpid(), ret); //father}sleep(1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Excel】excel多个单元格的内容合并到一个单元格,并使用分隔符

方法一&#xff1a;使用连接符 & 左键单击选中“D2”单元格&#xff0c;在D2单元格中输入公式“A2&B2&C2”&#xff0c;按“Enter”即可实现数据合并。 ------如果想连接的时候&#xff0c;中间加分隔符&#xff0c;可以使用&#xff1a;公式A2&"&#xf…

FPGA学习——PWM实现呼吸流水灯(附源码)

文章目录 一、PWM简介1.1 PWM定义1.2 PWM参数 二、Verilog实现PWM呼吸灯三、实现效果四、总结 一、PWM简介 1.1 PWM定义 PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用&#xff0c;方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号…

AI Is the New Power

这个题目纯粹是为了博眼球&#xff0c;因为吴恩达有个题目是AI Is the New Electricity。&#xff1a;&#xff09;但是我想AI确实是为我们这些企业信息化顾问顾问赋予了新的力量&#xff0c;在我们的职业生涯中开辟了新的可能性。 在几周前的文章中&#xff0c;我们提到“终点…

Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond

LLM的系列文章&#xff0c;针对《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》的翻译。 在实践中驾驭LLM的力量——ChatGPT及其后的研究综述 摘要1 引言2 模型实用指南2.1 BERT风格的语言模型&#xff1a;编码器-解码器或仅编码器2.2 GPT风格…

WEIQ自动登录实现

文章目录 声明目标网址password加密分析代码实现声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 目标网址 aHR0cHM6Ly93d3cud2VpcS5jb20vpassword加密分析 研究一下登录加密逻辑,随便…

js小写金额转大写 自动转换

// 小写转为大写convertCurrency(money) {var cnNums [零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖]var cnIntRadice [, 拾, 佰, 仟]var cnIntUnits [, 万, 亿, 兆]var cnDecUnits [角, 分, 毫, 厘]// var cnInteger 整var cnIntLast 元var maxNum 999999999999999.9999var…

基于springboot+Redis的前后端分离项目(七)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 发布笔记&#xff0c;点赞&#xff0c;点赞排行 达人探店1、达人探店-发布探店笔记2、 达人探店-查看探店笔记3、 达人探店-点赞功…

从零搭建ros间的通信,各功能包、节点之间的通信

新建消息类型 catkin_create_pkg car_interfaces roscpp rospy std_msgs message_generation message_runtime书写自定义的msg&#xff1a; 比如我写一个GlobalPathPlanningInterface.msg&#xff1a; float64 timestamp #时间戳 float32[] startpoint #起点位置&#x…

Eclipse调整系统字体(亲测)

1. 打开eclipse的菜单栏windows->preferences 2. 选择General->Appearance->colors and fonts 3. 选择字号&#xff0c;Apply&#xff0c;ok 建议选择常规18号&#xff0c;这样对眼睛友好一些&#xff0c;不易太大太小 为了大家更好的学习交流&#xff0c;博主新建了v…

MCSM面板一键搭建我的世界服务器 - 外网远程联机【内网穿透工具】

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 前言 MCSManager是一个…

华为发布大模型时代AI存储新品

7月14日&#xff0c;华为发布大模型时代AI存储新品&#xff0c;为基础模型训练、行业模型训练&#xff0c;细分场景模型训练推理提供存储最优解&#xff0c;释放AI新动能。 企业在开发及实施大模型应用过程中&#xff0c;面临四大挑战&#xff1a; 首先&#xff0c;数据准备时…

2、用phpMyAdmin修改mysql的密码

用phpMyAdmin登录mysql服务器&#xff0c;默认的用户名密码为 Username: root Password: [null] 在账户中修改密码