我有超过30个进程'[avconv]'(我在脚本中有一个错误),使用此命令我找到这些过程:
Ps aux | grep '\[avconv\] <defunct>'
但我不知道如何杀死这些过程,任何人都有想法杀死这些过程?
由于
答案 0 :(得分:2)
<defunct>
进程是一个已经终止的进程,因此无法被终止,但是父进程尚未调用其中一个等待系统调用(wait
,{{1} },wait3
,wait4
等...)读取其退出状态。因此,如果父母最终尝试获取其状态,系统将保留过程信息。当父母阅读退出状态时,这些过程就会消失。
当父级被杀时,这些waitpid
进程也会消失,因为<defunct>
进程将获取进程的所有权并获取(并丢弃)其状态。
您可以通过确保在发出init
来电时发出尽可能多的<defunct>
系统调用来避免wait
个流程。
或者,正如JF Sebastian指出的那样,您也可以通过将SIGCHLD信号处置设置为SIG_IGN(忽略信号)或在注册SIGCHLD信号处理程序时使用SA_NOCLDWAIT标志来避免fork
进程(或者使用<defunct>
重置SIG_DFL的默认处置。但是,在这种情况下,孩子的退出状态将不会对父母可用 - 它只是被丢弃。