c++ - 一旦执行完成就杀死子进程(在fork之后)

标签 c++

我正在编写一个简单的网络服务器。简化后的程序如下

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/

相关文章:

c++ - 在抛出 'std::bad_alloc' what(): std::bad_alloc 实例后调用终止

c++ - 无法打开套接字 C++

c++ - 重物体的initializer_list

c++ - 默认情况下,c++ 成员函数是否使用 cdecl+fastcall 约定编译?

c++ - 类函数 toString() C++

c++ - 错误 C2893 : Failed to specialize function template C++

c++ - 具有多个模板参数的模板特化

c++ - 类型删除工作或失败取决于优化级别

c++ - DirectX 11 和 g++ 编译错误

php - 需要将C++代码重写为PHP