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?

Jared Brown
źródło
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ć.

Saurabh Barjatiya
źródło
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.

ericslaw
źródło
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.

derobert
źródło
Czy można coś zrobić z trudnymi procesami stanu D poza uruchomieniem komputera? ppid = 1
Prof. Moriarty