2013-03-26 79 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