如何从外壳程序脚本检查是否在MAC OS X中加载了启动的进程?

问题描述 投票:4回答:2

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

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

如果该进程已经加载,则工作正常。但是,如果未加载该文件,而我执行了命令,则会显示一条消息,提示未加载该进程。因此,我需要检查一下,如果当前正在加载.plist文件,则仅应将其卸载,否则不可以。

我如何实现这一目标。请提供帮助。谢谢!!

macos launchd
2个回答
7
投票

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

一种可能是通过launchd命令查询launchctl list

列表[-x] [标签]

不带参数,列出加载到启动中的所有作业中的三个列。第一栏如果作业正在运行,则显示该作业的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

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
    "com.citrix.ReceiverHelper" => false
    "com.soma-zone.JobWatch" => true

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

© www.soinside.com 2019 - 2024. All rights reserved.