Jak zabić wszystkie procesy w OS X za pomocą skryptu

0

Szukam skryptu, który zabije wszystkie procesy na moim Macu. Aby być bardziej szczegółowym, skrypt powinien zabić wszystkie procesy i zamknąć.


Chodzi o to, że chcę zabić wszystkie procesy i uruchom ponownie Mac OS X ale nie zamykając go. Wiem, że istnieją takie polecenia sudo shutdown -r now ale nie działa na moim Macu (to polecenie restartuje go, ale nie zabija procesów po ponownym uruchomieniu).

Nie mogę użyć sudo shutdown - h now ponieważ nie mam dostępu do mojego Maca (tylko TeamViewer do połączenia z moim Macem Mini). Nie mogę więc wcisnąć / wyłączyć / ponownie uruchomić przycisku.

Jakieś pomysły, jak to zrobić?

Macko
źródło
1
Często pomaga poprosić o rzeczywisty problem, który musisz rozwiązać, a nie próba rozwiązania. Dlaczego nie możesz po prostu zamknąć Maca bez zabijania procesów? Procesy i tak zostaną zakończone. To, o co pytasz, wydaje się dość wymyślne. Zobacz też: mywiki.wooledge.org/XyProblem
slhck
1
Mówisz tak sudo shutdown -r now nie zabija procesów po ponownym uruchomieniu. Więc nie. Jeśli zabijesz wszystkie procesy, będzie to obejmować proces init, który ponownie zatrzyma twój system. Ponowne uruchomienie koniecznie spowoduje ponowne uruchomienie wielu procesów.
ChrisInEdmonton

Odpowiedzi:

3

Jak zauważył Daniel J., dlaczego nie możesz użyć

   sudo shutdown -h now

Spowoduje to zabicie wszystkich procesów na komputerze i zamknięcie komputera. Dlaczego musisz „przepisać” skrypt, który został już wykonany przez shutdown dowództwo?

sameetandpotatoes
źródło
2

Potrzebujesz skryptu bash, który pobiera listę wszystkich działających procesów i ich PID, a następnie używa pętli do zabicia każdego z tych PID, takich jak kill 1002 wewnątrz pętli po wywołaniu możesz wywołać proces zamykania. Rzecz w tym, że proces zamykania działa już dla ciebie.

Daniel J.
źródło
1
Nie ma potrzeby pisania skryptu bash. killall powinien działać. Albo do cholery, tylko kill -9 -1.
ChrisInEdmonton
0

Jeśli istnieje tylko kilka konkretnych procesów, które chcesz zakończyć, możesz użyć killall a następnie użyj AppleScript do wysłania loginwindow za kAEShutDown Apple event:

killall process1 process2
osascript -e 'tell app "System Events" to shut down'

Jeśli chcesz zamknąć system bez pytania o zapisanie niezapisanych zmian itd., Spróbuj użyć sudo shutdown -h now. Wysyła wszystkie procesy TERM sygnał, po którym następuje a KILL sygnał, który powinien być stosunkowo bezpieczny nawet w przypadku aplikacji graficznych. Jeśli aplikacja obsługuje nagłe zakończenie, wysyłanie jej powinno być bezpieczne KILL sygnał.

Zazwyczaj po zamknięciu aplikacje Cocoa są kończone przez wywołanie applicationShouldTerminate: Metoda delegata, aplikacje inne niż Cocoa i procesy w tle są wysyłane kAEQuitApplication Zdarzenie Apple i demony są wysyłane TERM sygnał, po którym następuje a KILL sygnał. Widzieć Przewodnik po programowaniu demonów i usług .

Edytuj: jeśli chcesz wyłączyć ponowne otwieranie aplikacji po ponownym uruchomieniu, możesz uruchomić defaults -currentHost write com.apple.loginwindow TALAppsToRelaunchAtLogin -array '()' przed sudo shutdown -r now. Lista aplikacji do ponownego otwarcia przy logowaniu jest przechowywana w ~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist.

Lri
źródło
Chodzi o to, że chcę zabić wszystkie procesy i zrestartować Mac OS, ale nie wyłączam go. Wiem, że komenda istniejąca jak sudo shutdown -r teraz, ale nie działa na moim Macu (restartowanie, ale nie zabijanie procesów). Nie mogę teraz użyć polecenia sudo shutdown - h, ponieważ
Macko