process

进程

进程的一些知识点,进程与程序的区别,进程的信息这几个方面来讲述的

1、进程的概念:是一个程序的一次执行的过程

2、进程和程序的区别:

程序:是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。

### 进程:是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡。

a、调度:时间片轮转

​ 时间片:进程在某一时刻获取CPU控制的时间的

b、退出:进程退出,将该进程获取的有限资源全部释放

c、静态查看进程的信息:ps aux或者ps axj

1
2
3
4
5
6
7
8
9
10
PPID(parent peocess ID) 父进程ID
PID(process ID) 进程ID
PGID(process group ID) 进程组ID
SID 会话组ID号
TTY终端 ? 表示后台进程
TPGID 终端进程组ID
STAT 进程的状态(就绪、挂起、关机)
UID 当前用户的ID
TIME 进程获取到控制CPU的总时间
COMMAND 进程的名称
1
2
3
4
5
6
7
CTRL+c 将进程退出
CTRL+z 将进程停止
bg 将程序放到后台运行
fg 放到前台

​ 进程号是进程的标识,由系统进行定义;

​ 进程号为1,称之为init进程,是所有进程的祖先;

​ 进程号为0,称之为调度进程,有内核开启;

3、进程的种类

1)交互进程:该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以在后台运行,可以与用户直接交互,且受终端的控制。

2)批处理进程该是一个进程序列,负责按照顺序启动,该类进程不属于某个终端,不与用户进行交互,在后台运行,称之为进程的集合。

3)守护进程:长期运行在后台做某些服务。本身属于后台进程, 不受终端控制。自己做为会话组组长。

4)僵尸进程:如果子进程先退出,而父进程并没有对子进程的资源进行回收。则子进程称之为僵死进程。

5)孤儿进程:父进程先退出,而它的子进程还在运行,那么该子进程被称为孤儿进程。孤儿进程将被1号进程(init)收养,并最终由1号进程对其资源回收。不论子进程处于运行态、睡眠态、僵尸态、暂停态对会被1号进程收养。

4、进程的命令

1
2
3
4
命令 作用
top 动态显示系统中的进程
ps -ajx 查看当前系统当中的进程的详细信息
pstree 以树形的方式显示所有进程的名字

5、进程的状态

1
2
3
4
5
6
7
8
9
状态 作用
R   正在执行中
S   阻塞状态
T   暂停执行
Z   僵尸态
<   高优先级的进程
N   低优先级的进程
l 多线程
s 会话组组长

6、进程的相关函数

1)进程的创建

1
2
3
4
5
6
7
8
9
#include <unistd.h>
pid_t fork(void);
功能:创建一个子进程
参数:
返回值:
>0 子进程的进程号,父进程的代码区
=0 子进程的代码区
<0 出错

getpid(void) 获取当前进程的进程号

getppid(void) 获取当前进程的父进程的进程号

2)退出一个进程

1
2
3
4
5
6
7
8
#include <stdlib.h>
void exit(int status);
功能:退出一个进程
参数:
0 正确退出
非0 错误退出
返回值:

注意:不管exit在哪使用,都代表结束一个进程;而return,在子函数里面使用代码退出这个函数,而在main函数里面,代表结束程序。