2013-03-26 77 views
2

当我建立一个应用程序,其提供LaunchAgent(与“托盘”图标的小UI应用程序停止LaunchAgent;让我们说,在/Library/LaunchAgents/foo.plist定义卸载包

当安装包launchctl加载此LaunchAgent自动说明和启动过程用于所有登录用户(即我不必使用launchctl加载,就像我与LaunchDaemons一样)

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

(我有多个用户登录,所以有此代理的多个实例)

现在,我该如何告诉根的launchd停止这些进程(未指定数量的用户)以root身份运行吗? (注意,launchctl作为root运行,甚至没有看到这些代理)。

(PID-文件,killall more-or-less-unique-executable-name是最后的手段,我要留着这些解决方案作为最后手段)

回答

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>代码后(以防万一)

+0

感谢。对于我来说,就像计数“黑客”的解决方案,但让我们接受现实,忘记有关... – 2013-03-27 05:24:17

+1

BTW,grep的是多余这里...一个管就够了: LOGGEDUSERS ='谁| awk'/ console/{print $ 1}'' – 2013-03-27 05:32:29