如何检查已启动的进程是否从shell脚本加载到MAC OS X中?

时间:2015-04-23 06:37:59

标签: macos launchd

我有一个要卸载的启动进程,我使用的命令是

launchctl unload /System/Library/LaunchDaemons/costomscript.plist

如果已加载进程,它可以正常工作。但是如果它没有加载并且我执行了命令,它会给出一条消息,说明没有加载这样的进程。所以我需要检查一下,如果当前加载了.plist文件,那么只有它才能被卸载,否则不会。

我如何才能实现这一目标..请帮助。谢谢!!

2 个答案:

答案 0 :(得分:6)

您可以使用launchctl获取有关正在运行的流程的信息。

一种可能性是使用launchd命令查询launchctl list

  

列出[-x] [标签]

     

没有参数,列出所有加载到launchd中的作业三个   列。第一列                 如果作业正在运行,则显示该作业的PID。第二列显示最后退出状态                 这份工作。如果此列中的数字为负数,则表示信号的负数                 这杀了这份工作。因此," -15"表示该作业已被SIGTERM终止。                 第三列是工作的标签。

如果您的plist已加载,则应列出,否则不会。第一列还包含进程的pid,因此您可以检查进程是否正在运行,例如:

$ launchctl list |grep myprocess
600 0   org.example.myprocess.1234

还有launchctl print命令可以提供有关进程的详细输出。检查您是否可以使用它。

  

打印域名目标|服务目标

     

打印有关指定服务或域的信息。域   输出包括有关域的各种属性以及列表   域中的服务和端点与状态相关的每个。服务输出包括服务的各种属性,包括有关它的信息   原始磁盘,其当前状态,执行上下文和最后退出状态。

例如:

$ launchctl print gui/501/org.example.myprocess.1234 | grep state
    state = running

答案 1 :(得分:0)

尝试:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ launchctl print-disabled user/uid

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

然后在脚本中查找“ => true”。

例如

$ launchctl print-disabled user/501 
disabled services = {
    "com.apple.Siri.agent" => true
    "com.apple.FileStatsAgent" => false
    "com.apple.ScriptMenuApp" => true

login item associations = {
    "version.com.docker.helper" => "31259"
    "com.docker.helper" => "com.docker.docker"
    "version.com.paragon-software.ntfs.FSMenuAppLoginItemHelper" => "15.4.59"