我构建了一个提供LaunchAgent的应用程序(一个带有“托盘”图标的小型UI应用程序;假设在/Library/LaunchAgents/foo.plist
中定义。
安装软件包时,launchctl会自动加载此LaunchAgent描述并启动所有已登录用户的进程。 (即我不必像使用LaunchDaemons那样使用launchctl加载来加载它。)
当我卸载软件包时,所有文件 - 包括/Library/LaunchAgents
中的LaunchAgent plist文件都被删除,但进程仍在运行。
(我有几个用户已登录,因此该代理有多个实例)
现在,在以root身份运行时,如何告诉root launchd停止这些进程(对于未指定数量的用户)? (注意,以root身份运行的launchctl甚至看不到这些代理)。
(pid-files,killall more-or-less-unique-executable-name
是最后的手段,我保留这些解决方案作为最后的手段)
答案 0 :(得分:2)
试试这个:
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>
(以防万一)