Если есть только несколько определенных процессов, которые вы хотите завершить, вы можете использовать killall
а затем использовать AppleScript, чтобы отправить loginwindow
событие Apple kAEShutDown
:
killall process1 process2
osascript -e 'tell app "System Events" to shut down'
Если вы хотите завершить работу без запроса сохранения несохраненных изменений и т.д., Попробуйте использовать sudo shutdown -h now
. Он отправляет всем процессам сигнал TERM
за которым следует сигнал KILL
, что должно быть относительно безопасно даже в графических приложениях. Если приложение поддерживает внезапное завершение, предполагается, что отправлять ему сигнал KILL
.
Обычно при закрытии приложения Какао завершаются вызовом applicationShouldTerminate:
метод делегата, приложения не-Какао и фоновые процессы отправляются событию Apple kAEQuitApplication
, а демонам отправляется сигнал TERM
за которым следует сигнал KILL
. См. Руководство по программированию демонов и сервисов .
Изменить: если вы хотите отключить повторное открытие приложений после перезапуска, вы можете запустить defaults -currentHost write com.apple.loginwindow TALAppsToRelaunchAtLogin -array '()'
до sudo shutdown -r now
. Список приложений, которые можно открыть при входе в систему, хранится в ~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist
.