Próbowałem zabić wszystkie moje zadania w tle przesłane wcześniej przez KUbuntu przez
kill -9 $(jobs -p)
Chociaż polecenie to natychmiast nadało komunikat podobny
[1] Zabił myjob1
[2] Zabił myjob2
Nadal widzę, że ich procesy zawieszają się na wyjściu top, a użycie procesora i pamięci nie ulega zmianie na wyjściu uptime i jest bezpłatne.
Więc chyba nie zabiłem ich odpowiednio. Czy ktoś może wyjaśnić, co się ze mną dzieje i co mam zrobić?
Odkryłem, że na górze, jeśli wpisz k i wprowadź PID, mogę zabijać procesy jeden po drugim. Czy to różni się od polecenia kill?
Znalazłem też gdzieś w Internecie http://www.ruhr.de/home/smallo/award.html informację o niezalecaniu zabicia -9
Bezużyteczne użycie formularza Kill -9
(Cytat ohyda)
Nie nie nie. Nie używaj kill -9.
Nie daje to procesowi możliwości czystego:
1) zamknij połączenia gniazd
2) wyczyść pliki tymczasowe
3) poinformować dzieci, że wyjeżdża
4) zresetować charakterystykę terminala
i tak dalej i tak dalej i tak dalej.
Ogólnie rzecz biorąc, wyślij 15 i poczekaj sekundę lub dwie, a jeśli to nie zadziała, wyślij 2, a jeśli to nie zadziała, wyślij 1. Jeśli to nie zadziała, USUŃ BINARNY, ponieważ program źle się zachowuje!
Nie używaj kill -9. Nie wyjmuj kombajnu tylko po to, by posprzątać doniczkę.
Czy to prawda? Co to znaczy „wyślij 15”, „wyślij 2” i „wyślij 1”? Czy sami sobie nakazują, czy „zabij -15 PID”, „zabij -2 PID” i „zabij -1 PID”?
Dziękuję i pozdrawiam!
Odpowiedzi:
Twój proces prawdopodobnie nie żyje, ale nadal pojawia się we wpisie tabeli procesów, ponieważ jest to „proces zombie”. Gdy proces potomny zostanie zakończony i całkowicie zniknie (z wyjątkiem wpisu w tabeli procesów), a rodzic nie będzie mógł pobrać statusu zakończenia (przez dowolną funkcję oczekiwania), nazywa się to zombie ... Zabijanie (przez sygnał) zombie nie będzie działa, ponieważ jest już zakończone. Musisz dowiedzieć się, jaki jest jego proces nadrzędny i zabić go jednym czystym, a tym samym nie używać kill - 9
oto dwa proste kroki, aby zabić zombie ...
źródło
-f
flagi do ps, aby zobaczyć procesy nadrzędne.zobacz
man kill
definicję różnych dostępnych sygnałów, ale tak.Informują one proces, że użytkownik „skończył” proces, chociaż wskazują one nieco inne powody. SYGTERM może być interpretowany jako „zakończ bieżące zadanie, ale następnie wyjdź; nie uruchamiaj innego”, SIGINT oznacza „porzuć to, co „robię i wychodzimy”, SIGHUP oznacza po prostu, że nikt już nie słucha (proces serwera może zgodnie z prawem zareagować na SIGHUP, przerywając wyjście konsoli i kontynuując działanie).
źródło
Oznacza to użycie
kill -15 PID
(lub innej liczby) zamiastkill -9 PID
. Liczby są równoważne z różnymi sygnałami uniksowymi .źródło
Oznacza to wpisz „zabij -1” lub „zabij -15” zamiast „zabij -9”. Kill -9 to hardkorowa kula w głowie każdego działającego procesu, zabija ją w stanie brudnym, co może powodować wyciek pamięci, bla bla.
Jeśli wpisujesz kill -9 i to nie działa, to postaram się upewnić, że proces się nie odradza i że masz pozwolenie na zabicie tego procesu.
źródło
Sygnał 9 to SIGKILL. Wysłanie SIGKILL prosi system operacyjny o natychmiastowe zakończenie procesu, bez zadawania żadnych pytań. Proces ten nie jest zawiadamiany z wyprzedzeniem i nie ma szans na oczyszczenie go po sobie.
Sygnał 15 to SIGTERM. Wysłanie SIGTERM wymaga od systemu operacyjnego, aby poprosił o zamknięcie procesu.
SIGKILL może zostać zignorowany, jeśli system operacyjny uważa, że proces wykonuje IO lub jeśli jest to Zombie (proces potomny, którego rodzic nie wyczyścił po nim).
SIGTERM może być ignorowany przez aplikację, ale nie jest zalecane, aby aplikacje to robiły, ponieważ systemy operacyjne wysyłają SIGTERM podczas zamykania, a następnie SIGKILL, jeśli program nadal działa.
Uwaga: wiersz poleceń
kill
zawsze prosi system operacyjny o wysłanie sygnału do aplikacji, co może, ale nie musi, w zależności od tego, kto jest właścicielem procesu itp.źródło