2013-03-26 2 views
2

я построить приложение, которое обеспечивает LaunchAgent (в маленькое приложение пользовательского интерфейса со значком «подноса»,., Скажем, что определено в /Library/LaunchAgents/foo.plistостановки LaunchAgent при удалении пакета

При установке пакета launchctl нагрузки это описание LaunchAgent автоматически и запускает процессы для все зарегистрированные пользователи (т. е. мне не нужно загружать их с помощью загрузки startctl, как у меня есть с LaunchDaemons).

Когда я удаляю пакет, все файлы, включая файл plast LaunchAgent в /Library/LaunchAgents, удаляются, но обрабатываются все еще запущены.

(у меня есть несколько пользователей вошли в систему, поэтому есть несколько экземпляров этого агента)

Теперь, как я могу сказать root startd, чтобы остановить эти процессы (для неуказанного числа пользователей) при запуске с правами root? (note, launchctlt запускается как 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

Спасибо. Для меня это считается «взломать» решение, но давайте примем реальность и забудем об этом ... –

+1

BTW, grep избыточно здесь ... достаточно одной трубы: LOGGEDUSERS = 'who | awk '/ console/{print $ 1}' ' –