我正在编写一个简单的网络服务器。简化后的程序如下
while(1)
{
// accepting the connection.
accept();
pid = fork();
if(pid == 0)
{
// performing some operations
_exit(EXIT_SUCCESS);
} else {
sleep(1);
}
}
因此,一旦子进程执行,它就应该终止,而父进程应该继续接受连接。但是,对我来说,子进程没有被终止,甚至它(子进程)也接受连接。我在这里做错了吗?
我可以看到进程(子进程)没有被杀死。
top -U <username>
我需要这方面的帮助。提前致谢。 :)
最佳答案
父进程必须调用wait
“收获”子进程。
您需要“等待”子进程的原因是因为进程退出后仍然有剩余的资源,用于子进程的退出代码。 wait(及其同级系统调用)所做的不仅是等待子进程结束,而且还获取退出代码,以便操作系统可以正确清理子进程。如果父进程在退出之前没有等待所有子进程退出,那么所有子进程都会成为孤立进程,并且进程 ID 为 1
的进程将被设置为其父进程。
关于c++ - 一旦执行完成就杀死子进程(在fork之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584672/