资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
什么是孤儿进程和僵尸进程一、定义:什么是孤儿进程和僵尸进程僵尸进程:一个子进程在其父进程还没有调用 wait()或 waitpid()的情况下退出。这个子进程就是僵尸进程。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。注:僵尸进程将会导致资源浪费,而孤儿则不会。子进程持续 10 秒钟的僵尸状态(EXIT_ZOMBIE)#include #include #include #include main()pid_t pid;pid = fork();if(pid #include #include #include main()pid_t pid;pid = fork();if(pid ; 0)printf(“child %d terminatedn”, pid);return;第二种方法:两次 fork():转载在Unix 环境高级编程里关于这个在 8.6 节有非常清楚的说明。实例回忆一下 8 . 5 节中有关僵死进程的讨论。如果一个进程要 fork 一个子进程,但不要求它等待子进程终止,也不希望子进程处于僵死状态直到父进程终止,实现这一要求的诀窍是调用 fork 两次。程序 8 5 实现了这一点。在第二个子进程中调用 sleep 以保证在打印父进程 ID 时第一个子进程已终止。在 fork 之后,父、子进程都可继续执行我们无法预知哪一个会先执行。如果不使第二个子进程睡眠,则在 fork 之后,它可能比其父进程先执行,于是它打印的父进程 ID 将是创建它的父进程,而不是 init 进程(进程 ID1)。#include #include #include “ourhdr.h”int main(void)pid_t pid;if ( (pid = fork() 0)exit(0); sleep(2);printf(“second child, parent pid = %dn”, getppid();exit(0);if (waitpid(pid, NULL, 0) != pid) err_sys(“waitpid error”);exit(0);/avoid zombie process by forking twice
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号