2

我有一个由pid. 这个过程可能是:

  1. 跑步
  2. 已解散/僵尸(未收割)
  3. 已经收获(因此不再存在)

我想终止这个进程并确保没有僵尸残留。目前我的代码是

kill(pid, SIGKILL);
int temp;
waitpid(pid, &temp, 0); 

这行得通吗?

编辑: 指定的进程pid是我的程序的子进程。

4

2 回答 2

2

到目前为止这看起来不错,但我想知道为什么你会让案例 3 发生。您应该执行一些簿记,您的哪些子进程已终止并等待收获。一种方法是为 安装一个处理程序SIGCHLD,设置一个标志 awaitpid是有序的。这样你就可以保证所有的 pid 实际上都是你的子进程的。

于 2012-05-07T08:13:40.573 回答
2

应该可以正常工作,但一定要检查 waitpid 的返回值。由于信号,呼叫可能已返回。

于 2012-05-07T08:04:06.057 回答