[编程] 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进程(pid为1),init进程会周期性的等待所有的子进程,确保没有长时间的僵死进程
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网