Zabijanie procesów chcąc nie chcąc, nie jest płynnym ruchem: dane mogą zostać utracone, źle zaprojektowane aplikacje mogą się zepsuć w subtelny sposób, którego nie można naprawić bez ponownej instalacji .. ale całkowicie zależy to od wiedzy, co jest, a co nie jest bezpieczne w podana sytuacja. i co byłoby zagrożone. Użytkownik powinien mieć pojęcie, czym jest lub powinien być proces i jakie są jego ograniczenia (IOPS dysku, rss / swap) i być w stanie oszacować, ile czasu powinien zająć proces długotrwały (np. Kopia pliku, ponowne kodowanie mp3, migracja poczty e-mail, tworzenie kopii zapasowych [Twój ulubiony czas tutaj].)
Ponadto przesłanie SIGKILL
do pid nie gwarantuje zabicia go. Jeśli utknął w wywołaniu systemowym lub jest już zombie ( Z
in ps
), może nadal być zombie. Często dzieje się tak w przypadku długotrwałego procesu ^ Z i zapominania o nim bg
przed podjęciem próby kill -9
. Prosty fg
połączy ponownie stdin / stdout i prawdopodobnie odblokuje proces, zwykle następnie następuje zakończenie procesu. Jeśli utknie gdzie indziej lub w jakiejś innej formie zakleszczenia jądra, tylko ponowne uruchomienie może być w stanie usunąć proces. (Procesy zombie są już martwe po SIGKILL
przetworzeniu przez jądro (nie uruchamia się dalszy kod użytkownika), zwykle istnieje powód jądra (podobny do „zablokowania” oczekiwania na zakończenie połączenia systemowego), aby proces się nie zakończył.)
Ponadto, jeśli chcesz zabić proces i wszystkie jego dzieci, nawyk dzwonienia kill
z zanegowanym PID, a nie tylko z samym PID . Nie ma żadnej gwarancji SIGHUP
, SIGPIPE
ani SIGINT
innych sygnałów, które po nim wyczyszczą, a posiadanie wielu odrzuconych procesów do czyszczenia (pamiętasz kundla?) Jest denerwujące.
Bonusowe zło: kill -9 -1
jest nieco bardziej szkodliwe niż kill -9 1
(nie rób tego jako root, chyba że chcesz zobaczyć, co się dzieje na wyrzucanej, nieistotnej maszynie wirtualnej)