如何在不重新启动的情况下重新启动已启动的 OS X?

hat*_*rix 15 firefox launchd zotero macos

当我运行 Zotero/Firefox 时,它们经常崩溃并且我留下僵尸进程;在此之后,我无法打开 Zotero 或 Firefox 的新实例。我想摆脱这些僵尸进程而不是重新启动,所以对于<pid>僵尸进程,

$ ps -p <pid> -o ppid=
Run Code Online (Sandbox Code Playgroud)

给我<parent_pid>

ps aux | awk -v PID=<parent_pid> '$2 == PID {print $0}'
Run Code Online (Sandbox Code Playgroud)

告诉我父进程是/sbin/launchd用于用户的crippledlambda

有没有办法在不杀死我的系统的情况下重新启动它?

sudo kill -1 <parent_pid>
Run Code Online (Sandbox Code Playgroud)

什么也没做。我试过在脚本中编写它并使用sudo以下命令运行它:

for i in `launchctl list | grep launchd | awk -v PID=<parent_pid> '$1==PID { print $NF }'`; do `launchctl stop $i && launchctl start $i` ; done
Run Code Online (Sandbox Code Playgroud)

这显然(?)让我的灰色屏幕没有响应,所以无论如何我都必须重新启动。预先感谢您的建议。

小智 19

停止和启动启动守护进程的正确方法是launchctl unload

例如:

您可以使用launchctlunload子命令停止启动守护程序服务。

$ sudo launchctl unload /System/Library/LaunchDaemons/<daemon name>.plist
Run Code Online (Sandbox Code Playgroud)

要启动已禁用或已停止的启动守护程序:

$ sudo launchctl load /System/Library/LaunchDaemons/<daemon name>.plist
Run Code Online (Sandbox Code Playgroud)

? 小心禁用启动守护进程——尤其是苹果官方的;它可能会使您的系统无法启动,直到您以安全模式启动并手动重新启用它们。您不会像正常进程那样杀死launchctl,因为它可能会像您所经历的那样杀死您的系统。

> 有关 launchctl 的更多信息,请点击此处。(Apple launchctl 手册页)


ost*_*ard 7

从 launchd 手册页:

您不能直接调用 launchd。

因此,即使你可以阻止它,你也无法启动它,所以答案是没有办法。

  • 哈哈 - 正是这种态度,即准确性不再重要,这解释了 SO 质量的缓慢下降。新年快乐! (8认同)
  • 不,它没有,它说如何重新启动守护进程而不是启动本身。 (6认同)
  • 可惜我不能对评论投反对票。不仅这个答案是正确的,另一个答案根本无法真正解决问题。这与 launchd 启动的守护进程无关,而是在无响应的进程被强制终止时由 launchd 继承的僵尸进程。我有同样的问题,并且没有该死的守护进程可以杀死,因为它是一个浏览器触发 launchd 中的错误行为。回答“随便”让我热血沸腾,因为那些发现答案有用的人一开始就无法理解这个问题,而且情况更糟。 (4认同)
  • 为什么投反对票?我的帖子正确回答了所提出的问题。当然,另一篇文章更具建设性,但它实际上未能回答帖子标题的实际问题! (3认同)