Czasami wysłanie SIGTERM do procesu spowoduje wysłanie SIGTERM do wszystkich jego procesów potomnych. Czasami jednak to nie działa.
Czy istnieje polecenie lub narzędzie, które pozwoli mi zabić proces i wszystkie jego procesy potomne w tym samym czasie? Zwykle uciekam się do ręcznego zbierania wszystkich pidek w jednym poleceniu zabicia, ale wydaje mi się to głupie.
To SO pytanie pyta, jak to zrobić z perlem, ale wszystko, co wykona zadanie, byłoby świetnie.
pkill -9
to, że jest potężniejszy niżpkill
z jakiegokolwiek powodu.Odpowiedzi:
To pytanie SO obejmuje to.
źródło
Zakładając, że procesy współużytkują identyfikator sesji (co powinny, chyba że jawnie wywołały setsid ()), możesz zabić je w sesji za pomocą pkill:
Jeśli z innego terminala:
Potem wszystko umiera za jednym zamachem.
Możesz podobnie zabijać według grup procesów, chociaż jest to bardziej przydatne dla wielu dzieci, które wszystkie są o jeden poziom poniżej rodzica, a nie łańcucha powiązanych procesów.
źródło
Zazwyczaj odpowiadający klient powinien otrzymać sigterm i sam się wyłączyć, tym samym kończąc wszystkie rozwidlone procesy potomne. Z drugiej strony, jeśli klient nie odpowiada, normalny sygnał zakończenia prawdopodobnie nie wywoła żadnej odpowiedzi.
Następnie przechodzisz do wysyłania SIGKILL, który mówi samemu systemowi, aby zatrzymał proces, teraz - co może zrobić większość razy, z wyjątkiem sytuacji, gdy proces znajduje się w stanie nieprzerwanego uśpienia, jak na przykład oczekiwanie na niektóre operacje we / wy wejście lub podobne.
W takim przypadku nawet SIGKILL nie spowoduje nic w tym procesie; proces potomny prawdopodobnie będzie w podobnym stanie opóźnienia.
Istnieje przypadek graniczny, w którym proces nadrzędny może zostać poprawnie zakończony, ale proces potomny nie jest możliwy do wywołania. Wtedy skończysz z procesem zombie, którego nie można oczyścić, ponieważ jego ojca nie ma, ale na nic nie reaguje. Jedynym sposobem na ich usunięcie jest ponowne uruchomienie; w większości przypadków są one jednak nieszkodliwe, ponieważ jedyne, co robią, to podejmują PID, podczas gdy jakiekolwiek gniazdo, którego próbowali użyć, już zanikło.
źródło
Jeśli chcę zabić drzewo procesów Firefoksa, to czy mogę je zabić za pomocą powyższego polecenia „pkill -9 -s firefox”
źródło