Centos下进程控制块详解

文章内容如下:

1)标识符

2)状态

3)优先级

一。标识符

        标识符,说直白点就是每个进程的唯一ID号,相当于人的身份证识别码,这一部分主要讲解如何创建一个进程并获取它的标识符(PID与PPID),最后利用标识符结束进程

1)创建一个进程

        创建一个进程一般用fork()函数。 fork()函数用于创建子进程,它的返回值类型为pid_t,是无符号整型,创建子进程成功,那么会给父进程返回该子进程的PID,给子进程返回0,创建子进程失败返回-1,如下所示:

Centos下进程控制块详解_第1张图片

        利用这个返回值0或这非0,即ret,可以写个判断程序让父进程子进程各自执行不同的程序。这里面通常会有3个疑问:fork()为什么会有两个返回值?ret这一个变量真的保存了两个返回值吗?父进程与子进程能准确得出随先执行谁后执行吗?具体看这里13)

2)获取进程的标识符(PID与PPID)

        利用

pid_t id = getpid();

获取自己进程的标识符,即PID;利用

pid_t id = getppid();

获取自己进程的父进程标识符,即PPID。

3)利用标识符结束进程

        结束一个进程可以用kill,

kill -9 21222

表示杀掉21222号进程。

        另外,如果想持续查看一个进程,可以用指令

while :; do ps axj | head -1 && ps axj | grep test1 | grep -v grep; sleep 1;done

查看进程

Centos下进程控制块详解_第2张图片

         ps axj | head -1表示显示头部名称,相当于表中第一行的标题,ps axj | grep test1表示显示可执行文件test1的进程,ps axj | grep test1 | grep -v grep中的| grep -v grep表示过滤掉grep进程。

2)状态

Centos下进程控制块详解_第3张图片

       新建:表示这个进程刚刚被创建出来,还不能被运行,也还没有放进运行队列中排队的状态。
       运行:PCB在运行队列中排队就叫做运行(态)。符号R表示
       阻塞:等待非CPU资源就绪我们的进程所处的状态叫阻塞(状态)。符号S、D表示
      挂起:当内存不足时,系统适当的置换进程的代码和数据到磁盘,这个时候进程的状态叫挂起,此时只有PCB在内存中。

3)优先级

        确认谁先获得某种资源,谁后获得某种资源就叫优先级。之所以设置优先级是因为CPU的资源是有限的,如何评判优先级由计算机决定,更准确地说是由计算机中的调度器决定,计算机中评判你优先级的就叫调度器,调度器做的就是把谁拿到CPU上,把谁从CPU上拿下去。Linux下优先级(PRI)=老的优先级+nice值(-20~19)。PRI越小越早被执行。nice值可以理解为修正数据。老的优先级默认为80,每次修改优先级时,都是以老的优先级为基准进行修改。具体实践操作为输入top后再输入r即可修改。

你可能感兴趣的:(centos,linux)