杀戮和收割过程

时间:2012-05-07 07:28:46

标签: c unix posix

我有pid指定的子进程。这个过程可能是:

  1. 运行
  2. Defunct / Zombie(unreaped)
  3. 已经收获(因此不再存在)
  4. 我想杀死这个过程并确保没有僵尸。目前我的代码是

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

    这会有用吗?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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