我有一个每两分钟运行一次的启动作业,但它不在sudo launchctl list
。
我正在更改 plist 文件,包括文件名和 Label 键。我事先没有卸载它,而是加载了新命名的文件。也许这就是导致这种情况的原因,但我仍然希望它在列表中。
但它从来没有在sudo launchctl list
名单上。我cron
也检查过了,以防万一。
我检查了其他用户。我看到启动作业每两分钟运行一次的脚本ps aux
。有什么方法可以ps aux
查看哪个启动进程生成了该脚本吗?
我还能做什么来阻止这件事?重新启动服务器必须是最后的手段,重新启动 launchd 也是如此,但如果这是唯一的选择,那就是唯一的选择。
答案1
有什么方法可以用来
ps aux
查看哪个 launchd 进程产生了它?
如果您使用ps -ef
,则每行的前 3 个条目会告诉您进程的 UID、PID 和父 PID。以下是示例:
$ ps -ef|head -2
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 30May16 ?? 25:05.63 /sbin/launchd
通过这三者,您应该能够找出您正在寻找的进程的来源。下面是一个相当明显的例子,我正在查看softwareupdated
(的守护进程softwareupdate
):
首先,我查找该进程,然后使用 进行确认ps -ef <some_PID>
。我已经养成了以 结束搜索的习惯,以grep -v grep
将 grep 从结果中排除
$ ps -ef|grep softwareupdated|grep -v grep
200 3711 1 0 30May16 ?? 6:45.49 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated
$ ps -ef 3711
UID PID PPID C STIME TTY TIME CMD
200 3711 1 0 30May16 ?? 6:45.49 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated
父 PID 是有编号的1
,因此我检查:
$ ps -ef 1
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 30May16 ?? 25:08.24 /sbin/launchd