Jak mogę zabić proces według jego nazwy?

44

Czasami zauważam, że proces się Pythonrozłączył. Potem zabiję go za pomocą Monitora aktywności i wszystko będzie w porządku.

Zamiast tego chciałbym zabić ten proces w terminalu. Jednak wyszukiwanie PIDwydaje się trochę niepotrzebne, ponieważ z nazwy wiąże się tylko jeden proces Python.

Czy można zabić proces pod jego unikalną nazwą?

gentmatt
źródło

Odpowiedzi:

52

Powinieneś być w stanie uruchomić polecenie sudo killall Python.

Musisz uruchomić jako root, ponieważ Python należy do roota, a nie do użytkownika.

Matt Love
źródło
Zrobiłem to:No matching processes belonging to you were found
gentmatt
1
Proces Python nie należy do twojego użytkownika. Spróbuj go jako root zamiast: sudo killall Python.
HenningJ
1
@HenningJ Sudo z jakiegoś powodu pracował. Właśnie zobaczyłem, że proces należy do mnie. Mógłbym zabić proces bez sudoużycia go PID. Czemu?
gentmatt,
1
Myślę, że dzieje się tak, ponieważ użycie PID nie jest specyficzne dla użytkownika / katalogu głównego, podczas gdy nazwa procesu to. Przeredaguję tę odpowiedź, aby odzwierciedlić sudo.
Matt Love
Działa
21
sudo killall -s SIGINT "process name"

Jeśli nie możesz być sudo, ponieważ poprosi o hasło i czuję, że nie chcesz tego w skrypcie. pkill przyjdź na ratunek :)

pkill -9 "process name"
Roshan Mehta
źródło
5

Możesz zabić aplikacje za pomocą Activity Monitor.app, który jest rozwiązaniem GUI. Byłoby to proste „wymuszenie wyjścia”. Jednak w niektórych sytuacjach nie zawsze działa to z różnych powodów!

Rozwiązanie wiersza polecenia, jak wspomniano w powyższym komentarzu, oferuje użytkownikowi znacznie więcej opcji. sudo killall Pythonlub jeśli jest uruchomionym procesem programowym, również sudo killall /Applications/Whatever.appzmusza proces do zakończenia.

Możesz także zmusić proces do wyjścia, używając przypisanego PID . W przypadku Activity Monitor.app będzie to kill 25794lubkill -9 25794

wprowadź opis zdjęcia tutaj

Kilka dodatkowych szczegółów:

Program zabijania w Terminalu po prostu wymusza zamknięcie programu, tak jak za pomocą pilota. (Działa nawet, gdy SSH podłączasz do komputera Mac ze zdalnej lokalizacji. Postępuj zgodnie z poleceniem kill z numerem identyfikacyjnym procesu (krótkim PID) programu, który chcesz zakończyć.

O ile nie korzystasz również z sudo, możesz zabijać tylko programy, które „posiadasz” - działające na Twoim koncie. (Sam system operacyjny - root - zawsze uruchamia własne programy i technicznie możliwe jest, że inni ludzie, dzwoniąc z drogi, uruchamiają własne programy nawet podczas korzystania z komputera Mac!)

-9Flaga jest „non-połów, nie do pominięcia kill”. Innymi słowy, jest to zabójca przemysłowej wytrzymałości, że nie przyjmuje żadnych zarzutów o miłosierdzie z programu Zabijasz.

v2r
źródło
5

Mimo że ma używać PID, znaleźć następujące być całkiem wydajny:

ps aux | grep "String or name of process"

Ta linia zwraca wiele informacji na temat pasujących procesów, a ty możesz killlub cokolwiek z tego.

soxman
źródło
2
pkill -f "process name"

Na podstawie https://stackoverflow.com/a/22334807/1243763

Samir
źródło
1
Czy na MacOS jest pidof? A dlaczego nie użyć pkill, który nie ma problemu z dodatkowym procesem?
nohillside
zgadzam się i tęskniłem za tym. Miałem pidofbinarny jako niestandardowy alias ps -e -o pid,args | grep -E "\b$1\b" | awk "{print \$1}" | tr '\n' ' '. Ma pkill -fto więcej sensu.
Samir