孤儿进程
如果进程的父进程退出而子进程没有结束,那么子进程的父进程将变成init进程。
僵尸进程
如果子进程结束,父进程没有退出,也没有捕捉子进程的退出信号,那么子进程就会变成僵尸进程。僵尸进程不占用任何资源但是在linux内核进程表中却仍然保留着僵尸进程的条目,过多的僵尸进程影响系统的性能,也有可能让新的进程创建失败。
如何在系统中创建n个僵尸进程。
void test(int i)
{
printf("%d\n");
}
int main()
{
int procnum = 10;
int i = 0;
pid_t pid;
for(i = 0; i < 10; i++)
{
pid = fork();
if(pid == -1)
{
printf("error in fork %s\n", strerror(errno));
exit(0);
}
else if(pid == 0)
{
//让子进程进入此处代码不创建进程,直接退出
test(i);
exit(0);
}
}
sleep(10);
return 0;
}
如何避免僵尸进程?
1.在fork之前写下如下代码:
signal(SIGCHLID,SIG_IGN)//忽略 SIGCHLID 信号, linux内核来处理被父进程忽略的子进程。
2.在创建完子进程后调用 wait(NULL)等待捕获所有子进程退出状态,这样父进程不能正常退出,它必须等待所有的子进程结束。
(有待完善。。请不吝赐教)