【问题标题】:killing unknown launch daemon杀死未知的启动守护进程
【发布时间】:2017-06-22 04:44:02
【问题描述】:

我正在调试一个启动守护程序,并且以某种方式创建了一个我既无法杀死也无法找到关联的Label。我知道它正在运行,因为它每 10 秒附加到一个“hello world”文件。我有什么选择来调试这个?有没有办法退出正在运行 shell 脚本的进程?

我试过了:

  • launchctl unload 我编辑的所有.plists 仍然存在
  • launchctl list | grep 我创建的所有标签(我认为!!)
  • 重启系统

我已经尝试了here 和其他地方发布的所有建议。

参考页面here

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserApple Stack Exchange 会是一个更好的提问地点。
  • @jww 这是为一个编程任务调试一个启动守护进程。之前也有人问过类似的问题...
  • 讽刺的是,您在其他网站(例如 Super UserApple Stack Exchange)上发现了类似的问题和答案。
  • @jww 我没有看到讽刺意味;一些 SE 网站有明显的重叠。

标签: macos daemon


【解决方案1】:

守护进程的行为/可见性与所有者相关联。对于系统守护进程,首选语法(截至 2017 年)是:

  • 任何.plist 文件都应由/Library/LaunchDaemons 中的root 拥有,否则可能无法正确加载。
  • sudo launchctl load my_daemon.plist 启动的守护进程(以root 身份)只能使用命令sudo launchctl list;同样
  • 使用launchctl load my_daemon.plist 启动的守护进程(作为用户)只能使用命令sudo launchctl list

如果在过去的任何时候使用-w 标志调用了load,则即使在重新启动后,该守护程序也会持续加载,并且需要-w 将其卸载:

  • sudo launchctl load -w my_daemon.plist 加载一个守护进程,并且
  • sudo launchctl unload -w my_daemon.plist

在问题的情况下,守护程序可能是使用sudo 和/或-w 的某种组合启动的,然后在没有的情况下被查询/“停止”。

【讨论】: