我有一个要卸载的启动进程,我使用的命令是
launchctl unload /System/Library/LaunchDaemons/costomscript.plist
如果已加载进程,它可以正常工作。但是如果它没有加载并且我执行了命令,它会给出一条消息,说明没有加载这样的进程。所以我需要检查一下,如果当前加载了.plist文件,那么只有它才能被卸载,否则不会。
我如何才能实现这一目标..请帮助。谢谢!!
答案 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"