【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 孤儿进程和僵死进程
【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 孤儿进程和僵死进程
孤儿进程:因为父进程先退出而导致一个子进程被init进程收养的进程为孤儿进程。即孤儿进程的父进程更改为了init进程,该进程在孤儿进程退出后回收它的内核空间资源。
孤儿进程示例代码:
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { pid_t pid; if((pid=fork())==-1) perror("fork"); else if(pid==0) { printf("pid=%d,ppid=%d\n",getpid(),getppid()); sleep(2); printf("pid=%d,ppid=%d\n",getpid(),getppid()); } else { sleep(1); exit(0); } }
运行结果:
$ ./a.out pid=8283,ppid=8282 pid=8283,ppid=1
僵死进程:进程已退出,但它的父进程还没有回收其内核资源的进程为僵死进程,即该进程在内核空间的PCB没有释放。
僵死进程示例代码:
#include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { pid_t pid; if((pid=fork())==-1) perror("fork"); else if(pid==0) { printf("child_pid pid=%d\n",getpid()); exit(0); } sleep(3); system("ps"); exit(0); }
运行结果:
$ ./a.out child_pid pid=8314 PID TTY TIME CMD 3363 pts/1 00:00:06 bash 8313 pts/1 00:00:00 a.out 8314 pts/1 00:00:00 a.out <defunct> 8315 pts/1 00:00:00 sh 8316 pts/1 00:00:00 ps