[编程] C语言Linux系统编程-等待终止的子进程(僵死进程)

1.等待终止的子进程(僵死进程):

如果一个子进程在父进程之前结束,内核会把子进程设置为一个特殊的状态,处于这种状态的进程称为僵死进程

当父进程获取了子进程的信息后,子进程才会消失。

pid_t wait(int *status);

父进程调用这个方法会被阻塞住,如果子进程终止的时候,此方法会调用并且返回终止子进程的pid

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
        int pid,ppid;

        int ret=fork();
        if(ret>0){
                pid=getpid();
                ppid=getppid();
                printf("我是父进程,pid=%d , ppid=%d ,我新建的子进程pid=%d\n",pid,ppid,ret);
                int status;
                int sonPid=wait(&status);
                printf("我的子进程,pid=%d,终止了\n",sonPid);
        }else if(ret==0){
                sleep(2);
                pid=getpid();
                ppid=getppid();
                printf("我是子进程,pid=%d , ppid=%d \n",pid,ppid);
        }else if(ret==-1){
                perror("fork");
        }   
}

 

 

输出:

我是父进程,pid=22315 , ppid=12479 ,我新建的子进程pid=22316

我是子进程,pid=22316 , ppid=22315

我的子进程,pid=22316,终止了

 

2.如果父进程在子进程之前终止了,那么系统会把子进程设置给init进程(pid1),init进程会周期性的等待所有的子进程,确保没有长时间的僵死进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值