文章目录
- 进程退出
- 孤儿进程
- 僵尸进程
- 进程回收
- waitpid()函数
进程退出
子进程的退出需要父进程对其资源的释放,子进程只能对用户区的数据进行释放,无法完成对内核区的释放。
可以获取到。
两个退出的区别:
系统调用不会刷新缓冲区,只会显示”hello"(/n会刷新缓冲区)。
而C库函数调用会刷新缓冲区,会将“world"显示出来,return 0 相当于exit(0)。
孤儿进程
父进程结束了,子进程依然存在。
每出现孤儿进程,内核就会把其父进程设置为init(pid 为 1),而init进程就会循环的wait()它的已经退出的子进程。
init进程处理孤儿进程的善后工作。
孤儿进程并没有什么危害。
僵尸进程
Z+:进程类型,ps aux 可以查看,表示僵尸进程
<defunct>不存在的,死了的
解决方式:
需要父进程去释放回收子进程资源,无法使用kill -9杀死僵尸进程。
- 可以杀死父进程而通过init进程杀死僵尸进程
- *父进程使用wait()\waitpid()彻底清除僵尸进程
进程回收
父进程调用wait()函数时,该父进程会被挂起(阻塞),直到它的一个子进程退出或者收到一个不能被忽略的信号时。
当有子进程退出,会返回子进程的进程号,如果所有子进程都已经结束,没有子进程了,就会立即返回-1。
status 参数传入返回值:👇
WEXITSTATUS(status),进程通过return x或者 exit(x)后,该宏就可以返回x值
WTERMSIG(status),kill -9,则返回进程终止的信号编号9.
waitpid()函数
pid:
0和-1用的最多。