Jaka jest różnica między kill, pkill i killall

31

Znam się na killdowodzeniu i przez większość czasu po prostu używamy kill -9 do silnego zabicia procesu, istnieje wiele innych sygnałów, z których można korzystać kill. Zastanawiam się jednak, jakie są przypadki użycia pkilli killallczy istnieje już polecenie zabicia.

Czy pkilli killallużywać killpolecenia w ich implementacji? Mam na myśli, że są tylko opakowaniami killlub mają własną implementację?

Chciałbym również wiedzieć, w jaki sposób pgreppolecenie pobiera identyfikator procesu z nazwy procesu.

Czy wszystkie te polecenia używają tych samych podstawowych wywołań systemowych? Czy jest jakaś różnica z punktu widzenia wydajności, która jest szybsza?

Ijaz Ahmad Khan
źródło
2
Dwie rzeczy: Dlaczego warto korzystać kill -9domyślnie? -15 (proszę przestań) i -1 (modem się rozłączył, CZYSTO zamknij się) są o wiele bardziej uprzejmi. Po drugie. Uwaga na używanie killall na polach innych niż Linux. Może zachowywać się inaczej. (Np. Na solaris zabija wszystko. NIE FILTROWANE według nazw procesów).
Hennes,
Powiązane: unix.stackexchange.com/questions/91527/…
Byte Commander

Odpowiedzi:

31

killKomenda jest bardzo prosty wrapper do kill wywołania systemowego , który zna tylko identyfikatory procesów (PID). pkilli killallsą również opakowaniami do kill wywołania systemowego (w rzeczywistości do biblioteki libc, która bezpośrednio wywołuje wywołanie systemowe), ale może określić dla Ciebie PID na podstawie takich rzeczy, jak nazwa procesu, właściciel procesu, identyfikator sesji itp.

Jak pkilli jak killallmożna pracować przy użyciu ltracelub stracena nich. W systemie Linux oboje czytają /procsystem plików i dla każdego znalezionego pid (katalogu) przemierzają ścieżkę w celu zidentyfikowania procesu na podstawie jego nazwy lub innych atrybutów. Sposób ten jest technicznie rzecz biorąc specyficzny dla jądra i systemu. Zasadniczo czytają, z /proc/<PID>/statktórych zawiera nazwę polecenia jako drugie pole. Za pkill -fi pgrepsprawdź /cmdlinewpis dla każdego wpisu proc PID.

pkilli pgrepużyj readprocwywołania systemowego, podczas killallgdy nie. Nie mogę powiedzieć, czy jest jakaś różnica w wydajności: będziesz musiał to zrobić samodzielnie.

Otheus
źródło
2

kill i killall to narzędzia, które umożliwiają zabicie procesu. Pierwszy według PID, drugi według nazwy. pgrep (lista) i pkill (domyślnie zabijaj) to narzędzia, które umożliwiają wysyłanie wiadomości do procesu po nazwie lub innych atrybutach: http://linux.die.net/man/1/pkill Więcej informacji o sygnały: http://linux.die.net/man/7/signal

derwisze
źródło
Czy masz na myśli, że killallużywa się go do zabicia procesu według jego nazwy? i używa do tego celu pgrep? a killalltakże zabija wszystkie procesy potomne,? jakiego sygnału killallużywa domyślnie?
Ijaz Ahmad Khan
3
... chyba że jesteś w systemie Solaris, w którym to przypadku killallzabije wszystkie procesy, które masz prawo zabić, więc jeśli jesteś rootem, skutecznie zrestartujesz serwer.
Jenny D,
1
tak: killall chromiumzabije proces chromu, pgrep chromiumda ci listę PID, pkill chromiumzabije chrom. killall wysyła sygnał przez domyślny SIGTERM (jak pkill)
dervishe