在 Mac OS X 10.6 上,我有时会看到在“ps”中显示为“E”的进程,手册页上说这意味着它们“正在尝试退出”,但它们却不会退出。“kill -9”不起作用,等待也不起作用。有什么方法可以摆脱它们吗?我通常不会在意,但它们有时会阻止 Dock 中的条目。
答案1
尝试时是否出现错误kill
?如果您指定 PID,例如,会怎么样kill 12345
?
另外,您可以尝试 killall,如下所示:killall program
但请记住,它将杀死任何匹配的内容,因此请具体说明程序名称,不要只输入killall fi
可能匹配多个程序的内容,否则您可能会遇到意想不到的结果。
答案2
我在使用 Mac OS X 10.7.5 时也遇到了这个问题。在我的情况下,尝试退出的进程是单核细胞增多症。它“丢失”了它的父进程(应该是 bash,或者可能是 Terminal),因此无法终止父进程。killall 甚至找不到该进程;Activity Monitor 也找不到。问题是这个特定进程占用了一个 IP 端口,因此,我无法重新启动我正在运行的 Mono 应用程序,因为该端口在该进程退出之前处于锁定状态。人们希望端口锁定的释放会超时,但这显然不会发生。
这里有人问过类似的(可能是重复的)问题:如何在 Mac OS X 中终止进程而不让其自行重启以及 ServerFault 的情况:https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e
那里的说明也没什么用。终止 launchd 甚至以该用户身份登录/退出都不起作用。不幸的是,在这种情况下似乎只有重新启动才有效。
还要注意,这与“僵尸”进程不同。
我已向 Apple 提交了错误报告,但我认为他们会忽略它(因为这个问题可能与 Mono 和/或我正在使用的应用程序相关,与 Mac OS X 本身关系不大)。