如何使用终端在 Mac 上杀死僵尸进程或找到其父进程?
答案1
钢锯说道:
悲哀的是看来,杀死僵尸就是弑父,如果父级是 /sbin/launchd,则只能通过重新启动才能将其终止。
杀死它将是一个非常糟糕的想法launchd
,但你可以告诉它 HUP。
尝试sudo kill -s HUP 1
这将导致launchd
重新初始化而不重新启动。这在过去对我来说很有效(例如删除僵尸条目)。
答案2
悲哀的是看来,杀死僵尸就是弑父,如果父级是 /sbin/launchd,则只能通过重新启动才能将其终止。
我在使用 Xcode 时遇到了僵尸程序,然后停止了模拟器,它将僵尸程序交给我自己的 /sbin/launchd,它没有消失当我退出时。
ps -xo pid,ppid,stat,命令将显示您的流程,其父ID在第二列中。
答案3
僵尸进程已经死亡,无法被杀死。当父进程死亡时,它们应该被自动从进程表中删除。
它们不会减慢您的机器速度,您可以将它们留在那里(它们只是进程表中的条目)。
进程数是有上限的(你可以用 检查sysctl kern.maxproc
),而僵尸进程会减少该上限(因为它们会被计算在内)。
如果达到此限制,您将无法创建新的进程,并且将被迫重新启动。
答案4
您可以使用附加到父进程lldb -p <parent pid>
,然后调用expr (int)::waitpid(<child pid>, NULL, 0)
这将在父级中获取子僵尸进程的退出状态,从而从进程表中删除僵尸进程。