我有一个讨厌的进程(在这种情况下,一个应该在 iPhone Simulator 中运行的搁浅进程(现在已经退出很久了)。
97442 ?? 0:00.00 (MyProcess)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我能想到的一切,包括
sudo kill -9 97442
sudo kill -HUP 97442
Run Code Online (Sandbox Code Playgroud)
然而,就像乌鸦一样……这个过程仍然存在。
在这种情况下,这意味着为了继续工作,我必须重新启动我的机器。
sar*_*old 13
当一个进程像这个进程一样保留在进程表中时,你需要杀死它的父进程。首先,找到父进程PID:
ps -eo 'pid,ppid,comm' | grep 97442
Run Code Online (Sandbox Code Playgroud)
然后kill <pid>不管ppid结果如何都跑。(先给它一个干净地死去的机会。)
传统的UNIX设计使过程信息周围的家长收获和清理,以防父进程要运行getrusage(2),找出其子女的资源使用情况,或者wait(2)为他们的退出状态,等等。
当父母没有收获他们的孩子时,孩子们仍然是僵尸——直到父进程被杀死,此时内核会将孩子们重新设为init(8). init(8) 将收获新重新养育的孩子。