杀死进程'[avconv] <defunct>'</defunct>

时间:2014-02-27 19:53:09

标签: linux ubuntu

我有超过30个进程'[avconv]'(我在脚本中有一个错误),使用此命令我找到这些过程:

Ps aux | grep '\[avconv\] <defunct>' 

但我不知道如何杀死这些过程,任何人都有想法杀死这些过程?

由于

1 个答案:

答案 0 :(得分:2)

<defunct>进程是一个已经终止的进程,因此无法被终止,但是父进程尚未调用其中一个等待系统调用(wait,{{1} },wait3wait4等...)读取其退出状态。因此,如果父母最终尝试获取其状态,系统将保留过程信息。当父母阅读退出状态时,这些过程就会消失。

当父级被杀时,这些waitpid进程也会消失,因为<defunct>进程将获取进程的所有权并获取(并丢弃)其状态。

您可以通过确保在发出init来电时发出尽可能多的<defunct>系统调用来避免wait个流程。

或者,正如JF Sebastian指出的那样,您也可以通过将SIGCHLD信号处置设置为SIG_IGN(忽略信号)或在注册SIGCHLD信号处理程序时使用SA_NOCLDWAIT标志来避免fork进程(或者使用<defunct>重置SIG_DFL的默认处置。但是,在这种情况下,孩子的退出状态将不会对父母可用 - 它只是被丢弃。