Jak zabijać procesy nieodpowiadające na zabijanie -9


9

Widzę procesy na moim SGI Altix 450 z systemem SLES 10.1 najwyraźniej przestają działać (tzn. Nie dostarczają dalszych wyników w swoich logach przez wiele godzin). W tym momencie chcę zabić obraźliwy proces, aby móc go ponownie uruchomić. Góra pokazuje, że proces jest w stanie (R). Chociaż kiedy próbuję go zabić, nic się nie dzieje. Nawet kiedy używam kill -9, nadal trwa. W takim przypadku co mogę zrobić poza ponownym uruchomieniem komputera?


2
Czy to zdecydowanie ten sam identyfikator procesu? Nie chodzi o to, że zabijasz proces, a jakiś demon uruchamia proces o tej samej nazwie?
CK.

Odpowiedzi:


9

Możliwe, że proces zostanie zabity, ale czeka na to, aż rodzic odbierze jego wartość zwracaną. W takim przypadku po zabiciu byłby w stanie „Z”, a nie „R”. W takim przypadku powinieneś znaleźć ppidproces za pomocą pspolecenia i zabić proces nadrzędny (jeśli naprawdę jesteś pewien, że nie spowoduje to żadnych problemów).

Innym przypadkiem może być to, że z jakiegoś powodu proces wznawia się po zabiciu jak tty. W takim przypadku identyfikator procesu powinien się zmieniać za każdym razem, gdy zabijasz -9. Sprawdź, czy identyfikator procesu zmienia się za każdym razem, gdy próbujesz go zabić.


Myślę, że próbuję zabić proces nadrzędny. Jest to proces nadrzędny w stanie (R). pstree to potwierdza. Wszystkie procesy potomne znajdują się w (Z) stanach zombie. PPID pozostaje statyczny, więc nie sądzę, że po prostu uruchamia się ponownie.
Jared Brown

Jeśli zabijesz proces nadrzędny (i jego proces nadrzędny itd.), Init stanie się nadrzędny dla procesów podrzędnych, które są w stanie „Z” i zbierają ich wartość zwracaną. Zatem najlepszym sposobem na usunięcie potomków „Z”, których rodzic nie przyjmuje wartości zwracanej, jest zabicie rodzica, aby init stał się rodzicem martwych procesów potomnych.
Saurabh Barjatiya

To jest problem, który mam. Wysłanie sygnału -9 przez kill do procesu nadrzędnego nie kończy go.
Jared Brown

1
Czasami wystarczy wysłać SIGHUP do rodzica. Nie zawsze musisz zabijać rodzica.
Thomas

2
Przepraszam, SIGCHLD. (zbyt wcześnie rano)
Thomas

2

Proces czeka na jakiś zasób systemowy, może NFS? to nie pozwala mu „puścić”. Chciałbym usłyszeć niektóre rozwiązania tego poza moim ...

uruchom ponownie urządzenie lub poczekaj, aż proces się zatrzyma.

Zastanawiam się, czy uda Ci się zatrzymać proces za pomocą polecenia kill -STOP {PID}, aby zapobiec zużyciu większej ilości procesorów.

Ponowne uruchomienie powinno być możliwe nawet przy innym zatrzymanym procesie siedzącym w pobliżu, ale może wymagać portu listy lub segmentu pamięci współużytkowanej, który jest nadal używany przez inny proces.


1
Czy proces, który czekał na NFS lub jakąś funkcję I / O, nie byłby w stanie (D)? Te procesy są w stanie (R).
Jared Brown

Właśnie tak się czasami dzieje, kiedy wykonuję lspolecenie na s3fs mount. lsProces nie zabije nawet kill -9aż wymusić odinstalowania zumount -l
Marco Marsala

0

Czy sprawdziłeś już dmesg? Widziałem to po panice jądra; jedynym sposobem na odzyskanie jest ponowne uruchomienie komputera (najlepiej wkrótce) - a następnie załatanie łatanego jądra.

Normalne procesy, których nie można zabić, będą w stanie D, a nie R.


Czy można coś zrobić z trudnymi procesami stanu D poza uruchomieniem komputera? ppid = 1
Prof. Moriarty
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.