波奇学Linux:进程等待

僵尸进程(Z状态)无法被kill指令杀死,通过进程等待杀掉它,解决内存泄漏问题(进程处于僵尸态,仍然维护pcb结构体来解决问题)

通过进程等待,获得进程退出情况

wait回收僵尸态进程

波奇学Linux:进程等待_第1张图片

波奇学Linux:进程等待_第2张图片

 波奇学Linux:进程等待_第3张图片

波奇学Linux:进程等待_第4张图片

我们可以看到进程由五秒后子进程从僵尸态销毁,wait可以杀掉僵尸态的进程

wait每次只能回收一个僵尸进程

循环等待回收多个僵尸态进程

波奇学Linux:进程等待_第5张图片

波奇学Linux:进程等待_第6张图片

阻塞等待

如果子进程不是僵尸态,父进程在调用wait()时会进入阻塞状态,等待子进程结束,这是软件的阻塞状态,等待外设输入,属于硬件的阻塞状态。

waitpid()

波奇学Linux:进程等待_第7张图片

wait的int* status获取子进程退出信息

status作为输出型参数,相当于传入一个空间,进程结束后把子进程的信息放入status指向的空间

status保存的内容

波奇学Linux:进程等待_第8张图片

//00000000 00000000 00000000 00000000
(只看后16位)
00000000 //前8位退出码
0 // 第8位 core dump
0000000//1到7位 终止信号

信号码表示进程是否正常终止,退出码表示进程结束后,退出信息(return 0,exit(0) 0为退出码)

有信号码表示进程因为除0或者野指针等错误,不能正常终止。被操作系统干掉。

波奇学Linux:进程等待_第9张图片

非阻塞轮询:父进程多次访问子进程结束状态

pid_t waitpid(pid_t pid,int *status,int options)

options默认是0,默认情况下是阻塞方式,父进程会一直等待子进程,直到进程运行完。

当options的值是WNOHANG时,父进程不会阻塞,可以继续向下运行其他代码。

非阻塞轮询就是父进程不阻塞下在循环下多次间隔访问 

waitpid的返回值大于0,等待正常,返回值小于0,等待失败(等待的进程不是父进程的子进程时)等于0,函数运行正常,但还没确定结果。

波奇学Linux:进程等待_第10张图片

你可能感兴趣的:(Linux,linux,运维,服务器)