Answers:
天啊!不不不。不要使用kill -9。
它不会给过程一个干净的机会:
关闭插座连接
清理临时文件
通知其孩子它要消失了
重置其终端特性等等。
通常,发送15,然后等待一两秒钟,如果不起作用,则发送2,如果不起作用,则发送1。如果不起作用,请删除二进制文件,因为程序的行为不当!
不要使用kill -9。不要带出联合收割机只是为了整理花盆。
僵尸进程(实际上现在称为<defunct>
)不是一个进程。它仅是进程表中的条目,因此父进程可以执行wait()
syscall。
您不必担心它们。他们不占用任何资源,wait()
当父母亲去世时,它们会消失。
但是,已经有一个可以接受的答案:您可以杀死僵尸进程。将调试器附加到父进程,然后调用waitpid函数。例如:-假设父级的PID = 100,僵尸进程的PID = 200
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
僵尸进程除了进程树中的条目外,没有分配任何资源。当进程完成但父进程尚未收割(即wait
编辑)时,会发生这种情况。
您可以尝试通过将SIGCHLD(kill -20
)发送给父级来强制父级执行此操作,但不能保证父级会尊重它。
您经常会在短时间内看到它们(例如,在使用top查看过程树时)-这是正常现象;在子进程完成到父进程轮询之间的时间片中,子进程将显示为僵尸。
但是,如果看到僵尸进程连续存在-这是不正常的-仍然无需担心-再次,因为没有资源分配给死进程-这通常意味着糟糕的开发人员编写的应用程序差强人意。
僵尸进程您唯一需要担心的是,当您看到很多僵尸进程时,例如,是否将上面提到的同一个笨拙的应用程序置于负载下。
我在工作时有很多of脚的开发人员,因此我有特权处理此类问题并在这样做的同时学习各种无用的东西。实际上-我的团队经常在面试中使用糟糕的开发人员编写的糟糕的shell脚本-如果候选人可以选择脚本确实很糟糕,并告诉我们为什么它很糟糕,那么他的脚步很好。
至于虚拟shot弹枪...
$ Shoot <pid>
#!/ bin / sh 受害者=`ps -e -o pid,ppid | egrep“ ^ \ s * $ 1 \ b” | awk'{print $ 2}'` 受害者\ _名称=`ps -e -o pid,cmd | egrep“ ^ \ s * $ {受害者} \ b” | 头-n 1 | awk'{print $ 2}'` #kill $ {victim} 回显“已杀死$ {victim_name}”。
并记住:始终将它们射在头部。
僵尸进程是已完成执行但仍在进程表中列出的进程。
kill -9 [parent process_name]将把它放倒,带有极大的偏见。