![如果 kill -9 不起作用怎么办?](https://linux22.com/image/1303813/%E5%A6%82%E6%9E%9C%20kill%20-9%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%9F.png)
我遇到了一个讨厌的进程(在这种情况下,一个本来应该在 iPhone 模拟器中运行的搁浅进程(现在早已退出)。
97442 ?? 0:00.00 (MyProcess)
我已经尝试了所有我能想到的方法,包括
sudo kill -9 97442
sudo kill -HUP 97442
然而,就像乌鸦一样......过程仍然存在。
在这种情况下,这意味着为了继续工作我必须重新启动机器。
答案1
当一个进程仍然留在进程表中,就像这个进程一样,那么你需要杀死它的父母进程。首先,找到父进程PID:
ps -eo 'pid,ppid,comm' | grep 97442
然后kill <pid>
不管ppid
结果如何,都要继续跑。(首先给它一个干净利落地死去的机会。)
传统的 Unix 设计将进程信息保留在父母收集和清理,以防父进程想要运行getrusage(2)
以找出其子进程的资源使用情况,或者wait(2)
它们的退出状态等。
当父母不收割他们的孩子时,孩子将保持僵尸状态 - 直到父进程被杀死,此时内核将重新将孩子指定为父级init(8)
。init(8)
将要收获刚刚重新成为父母的孩子们。