僵尸进程和孤儿进程
2018-01-01 16:12
197 查看
僵尸进程
在创建子进程之后,父进程一直在忙,没有时间阅读子进程状态,导致子进程完成自己的任务之后无法退出,一直挂机,当进程退出父进程(使用wait()系统调用)没有没有读取到子进程退出的返回代码时就会产生僵尸进程。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> int main() { size_t pid = getpid(); size_t id = fork(); if(id<0) { printf("fork error,return code is:%d\n", errno); return 2; } else if(0 == id) { printf("child pid is:%d\n", getpid()); exit(3); } else { printf("father pid is:%d return pid is:%d\n", getpid(), id); sleep(1); } return 0; }
孤儿进程
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> int main() { size_t id = fork(); if(id<0) { printf("fork error"); } else if(0 == id) { while(1) { printf("child pid is:%d parent pid is:%d\n", getpid(), getppid); sleep(3); } } else { printf("father pid is:%d child pid is:%d\n", getppid(), getpid()); exit(1); } return 0; }