4

我构建了一个提供 LaunchAgent 的应用程序(一个带有“托盘”图标的小型 UI 应用程序;假设在/Library/LaunchAgents/foo.plist.

安装包时,launchctl 会自动加载此 LaunchAgent 描述并为所有登录用户启动进程。(即我不必像使用LaunchDaemons 那样使用launchctl load 来加载它)。

当我卸载软件包时,所有文件 - 包括 LaunchAgent plist 文件/Library/LaunchAgents都被删除,但进程仍在运行。

(我有几个用户登录,所以这个代理有几个实例)

现在,我应该如何告诉 root launchd 在以 root 身份运行时停止这些进程(对于未指定数量的用户)?(注意,以 root 身份运行的 launchctl 甚至看不到这些代理)。

(pid-files,killall more-or-less-unique-executable-name是最后的手段,我将这些解决方案作为最后的手段)

4

1 回答 1

3

尝试这个:

LOGGEDUSERS=`who | grep console | awk '{ print $1 }'`
for CURRUSER in $LOGGEDUSERS
do
    su -l $CURRUSER -c 'launchctl unload /Library/LaunchAgents/your.plist'
done

在我的卸载程序脚本中killall -15 <app_name>,该代码之后也有(以防万一)

于 2013-03-26T14:03:48.463 回答