当前位置: 技术问答>linux和unix
linux下如何防止僵尸进程的出现??
来源: 互联网 发布时间:2016-10-21
本文导语: //关于这个问题,网络上有段代码如下,但是看不懂这个程序时如何防止僵尸进程的出现的。那位高人指导下??? #include #include #include int main(void) { int pid; pid=fork(); if(pid==0) { printf("This is child process,pid=%d,bye...
//关于这个问题,网络上有段代码如下,但是看不懂这个程序时如何防止僵尸进程的出现的。那位高人指导下???
#include
#include
#include
int main(void)
{
int pid;
pid=fork();
if(pid==0)
{
printf("This is child process,pid=%d,bye!n",getpid());
exit(0);
}
sleep(1);
printf("Press return to remove zombie processn");
getchar();
wait(NULL);
printf("Press return to exitn");
getchar();
return 0;
}
#include
#include
#include
int main(void)
{
int pid;
pid=fork();
if(pid==0)
{
printf("This is child process,pid=%d,bye!n",getpid());
exit(0);
}
sleep(1);
printf("Press return to remove zombie processn");
getchar();
wait(NULL);
printf("Press return to exitn");
getchar();
return 0;
}
|
用wait UNIX环境高级编程写的很详细
wait的函数原型是:
#include /* 提供类型pid_t的定义 */
#include
pid_t wait(int *status)
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,
wait的函数原型是:
#include /* 提供类型pid_t的定义 */
#include
pid_t wait(int *status)
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,
|
父进程用wait系列函数,当然是正确的.
APUE上还提到一个技巧, 两次fork.
A fork B, B fork C, 然后结束B. C变成孤独进程,会被init进程接收.
原理是:
父进程结束时,子进程会归init进程接管.
init进程会保证它的子进程不变成僵尸.
APUE上还提到一个技巧, 两次fork.
A fork B, B fork C, 然后结束B. C变成孤独进程,会被init进程接收.
原理是:
父进程结束时,子进程会归init进程接管.
init进程会保证它的子进程不变成僵尸.