Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)

一、孤儿进程

孤儿进程:不是没有爹!会被领养。
过程:爹先死,孩子还活着,孩子称为孤儿进程。
注意:孤儿会被 init 进程领养(init 进程是所有孤儿进程的父进程)。
设计领养目的:为了子进程结束后,可以回收子进程占有的系统资源,因为进程结束后,子进程自己能够释放用户区空间,但无法释放 PCB,只能由父亲释放。

二、僵尸进程

僵尸进程:是一个死的进程。
过程:孩子死了,爹不回收孩子的 PCB,此时,孩子称为僵尸进程。

三、设计孤儿进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
 pid_t pid = fork();
 if(pid == 0) 
 {
 sleep(1); // 子进程睡一秒,使父进程先执行return死掉
 printf("%d\n",getppid()); // 结果:子进程的ppid = 1 // 意味着被init进程领养
 }
 if(pid > 0)
 {
 printf("%d\n",getpid()); // 结果:父进程的pid =3458
 }
 return 0;

四、设计僵尸进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
 pid_t pid = fork();
 if(pid == 0) 
 {
 printf("I am child"); // 先执行return死掉
 }
 if(pid > 0)
 {
while (1)
{
sleep(1) // 父亲一直sleep,因此没有回收子进程,使子进程成为僵尸进程
}
 }
 return 0;
}

那么如何杀死僵尸进程呢?
注意: 不能用 kill -9 pid,因为这个命令是杀死活的进程,
我们用杀死父进程,使僵尸进程被领养,自动释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值