您的位置:首页 > 其它

1.练习:在一个孤儿进程中创建十个僵尸进程

2015-04-23 15:10 316 查看
一个僵尸进程是在父进程有机会用wait或waitpid收集它退出状态之前就终止的进程。

子所以被称为僵尸进程是因为进程虽然结束了,但依然在进程表中存在。

子进程退出后分配给它的内存和资源都被释放,但它还是在内核进程表中保留一条记录,内核在父进程回收子进程的退出状态前一直保留它。

当进程表中进程条目太多时,会影响性能,导致创建进程失败,系统崩溃等。

fork或者exec函数创建了一个新进程,为了收集新进程的退出状态防止出现僵死进程(zombie process), 父进程应该调用waitpid等待子进程的终止,或者父进程退出,僵死进程也会被销毁掉。

代码中
当 i = n 则有 n个僵尸进程, 且它们的父进程ip都是 pid 因为,pid 的为子进程在创建之初就已经执行exit(0)所以即使是含有fork的循环中, 子进程也不会去创建新的子进程。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(void)
{
pid_t pid = fork();

if(pid == 0)
{
int i = 0;
for(i = 0; i<10; i++)
{
pid_t pid = fork();
if(!pid)
{

exit(0);

}
}
pause();
}
else
exit(0);

return EXIT_SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: