Zadałem pytanie, aby dowiedzieć się, jak uzyskać wiele wierszy wiadomości z modułu podprocesu Pythona.
Problem polega na tym, że w trakcie testów musiałem zabić proces Pythona, który uruchamia proces gnuchess. Używanie ^ c w wierszu poleceń wydaje się zabijać proces Pythona, ale nie gnuprocess.
Za zabicie gnuchess dostaję pid za pomocą ps aux | grep gnuchess i uruchom kill -9 PID . Czy istnieją inne metody zabijania zarówno Pythona, jak i gnuchess?
pkill
aby zabić proces po imieniu, więc możeszps aux | grep gnuchess
ikill -9 PID
po prostu zostaćpkill -9 gnuchess
Odpowiedzi:
Istnieje standardowa metoda, jeśli programy współpracują. Uruchom
kill -- -42
tam, gdzie 42 jest pid procesu nadrzędnego. To wysyła sygnał do wszystkich procesów w grupie procesów prowadzonych przez proces 42 (znak minus przed pid oznacza grupę procesów).Zwykle, jeśli uruchomisz skrypt Pythona z wiersza poleceń powłoki i po prostu rozwidli się
gnuchess
, dwa procesy powinny pozostać w tej samej grupie procesów. Ale wydaje się, że tak nie jest, ponieważ Ctrl+ CwysyłaSIGINT
do całej grupy procesów pierwszego planu.Gnuchess może należeć do swojej własnej grupy procesów, ponieważ stał się liderem sesji (ale nie wiem, dlaczego miałby to robić) lub ponieważ rozwidliłeś go dwukrotnie (python rozwidla powłokę, która wywołuje gnuchess). Prawdopodobnie można uniknąć podwójnego rozwidlenia, ale nie mogę ci powiedzieć, jak to zrobić bez obejrzenia twojego kodu.
Racjonalnie niezawodny i zgodny z POSIX sposób na znalezienie pid
gnuchess
procesu toOkreślone warianty uniksowe mogą mieć lepsze sposoby osiągnięcia tego celu, takie jak
pgrep
.źródło
Próbować:
źródło