【问题标题】:How to check for a launched process is loaded or not in MAC OS X from shell script?如何从 shell 脚本检查 MAC OS X 中是否加载了已启动的进程?
【发布时间】:2015-04-23 06:37:59
【问题描述】:

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

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

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

我怎样才能做到这一点..请帮忙。谢谢!!

【问题讨论】:

  • 你可以丢弃错误信息...launchctl unload xyz 2> /dev/null
  • @MarkSetchell Setchell 谢谢它解决了我的问题。
  • 是的,@MarkSetchell 是这里有有用答案的人

标签: macos launchd


【解决方案1】:

您可以通过launchctl 获取有关正在运行的进程的信息。

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

列表 [-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

【讨论】:

  • 你知道,工作标签中最后一个点后面的数字是什么吗? .123 在你的例子中。
  • 如果状态标签下有一个负数比如:3832 -9 com.apple.SafariBookmarksSyncAgent,这个负号是什么意思?
【解决方案2】:

试试:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ launchctl print-disabled user/uid
$ launchctl print-disabled user/501

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

并在您的脚本中查找“=> 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2010-10-15
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多