zabij -9 programów, ale nadal się zawieszają


11

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!


Usunięcie pliku binarnego (pliku wykonywalnego) samo w sobie nie zabije tego procesu. System plików będzie wiedział, że proces używa tego pliku i pozwoli procesowi „zobaczyć” plik nawet po jego usunięciu.
Jeppe Stig Nielsen

Odpowiedzi:


9

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 ...

  1. jeśli rodzic nadal żyje, spróbuj go zabić (lub wystarczy SIGHUP)
  2. jeśli numer 1 nie powiedzie się, w jądrze jest błąd .... ponowne uruchomienie jest twoim przyjacielem i napraw go: ->

Przesyłam swoje prace w wierszu poleceń i w tle, czym byliby ich rodzice? I jak mogę znaleźć ich rodziców, jeśli w ogóle?
Tim

Użyj -fflagi do ps, aby zobaczyć procesy nadrzędne.
Jack M.

6

zobacz man killdefinicję różnych dostępnych sygnałów, ale tak.

  • 15 to SIGTERM i prosi program o wyjście.
  • 2 to SIGINT i jest równoważne Control-C
  • 1 oznacza SIGHUP i oznacza, że ​​terminal się rozłączył.

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).

  • 9 jest SIGKILL i wyróżnia się tym, że jest to jedyny proces, którego proces nie może złapać i obsługiwać wewnętrznie. Po prostu powoduje to, że jądro nigdy nie powróci do sterowania procesem, nie dając mu szansy na oczyszczenie.

na górze, jeśli wpisz k i wprowadź PID, mogę zabić procesy jeden po drugim. Czy to odpowiada niektórym opcjom polecenia kill?
Tim

Tak, top po prostu wysyła sygnał do procesu, tak samo jak kill. AFAICT, domyślny sygnał używany przez top to 15 (SIGTERM).
puetzk


1

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.


Jak chciałbyś się upewnić, że proces się nie odradza? Skoro jestem właścicielem procesów, czy mam pozwolenie na zabicie tego procesu?
Tim

Powinien mieć inny numer procesu, jeśli tak jest. Więc jeśli użyjesz ps -Al i zobaczysz proces A, to zabijesz -9 procesA, a następnie ps -Al, a W kolejce procesów jest WCIĄŻ proces A, upewnij się, że jest to SAMY proces A, a nie nowy.
Satanicpuppy

I powie ci, jeśli nie masz pozwolenia na zabicie procesu.
Satanicpuppy

0

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ń killzawsze 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.