Ich habe eine Frage gestellt, um zu wissen, wie mehrere Nachrichtenzeilen vom Python-Unterprozessmodul abgerufen werden können.
Das Problem ist, dass ich im Verlauf des Testens den Python-Prozess beenden musste, der den Gnuchess-Prozess ausführt. Die Verwendung von ^ c in der Befehlszeile scheint den Python-Prozess zu beenden, nicht jedoch den Gnuprozess.
Um Gnuchess zu töten, bekomme ich die PID mit ps aux | grep gnuchess und run kill -9 PID . Gibt es andere Methoden, um sowohl den Python- als auch den Gnuchess-Prozess zu beenden?
pkill
, um einen Prozess mit Namen zu beenden , so dass Sieps aux | grep gnuchess
undkill -9 PID
können nurpkill -9 gnuchess
Antworten:
Es gibt eine Standardmethode, wenn die Programme zusammenarbeiten. Führen Sie aus,
kill -- -42
wobei 42 die PID des übergeordneten Prozesses ist. Dies sendet ein Signal an alle Prozesse in der Prozessgruppe, die von Prozess 42 geleitet werden (das Minuszeichen vor der PID bedeutet Prozessgruppe).Wenn Sie Ihr Python-Skript an einer Shell-Eingabeaufforderung ausführen und es einfach gabelt
gnuchess
, sollten die beiden Prozesse normalerweise in derselben Prozessgruppe bleiben. Dies scheint jedoch nicht der Fall zu sein, da Ctrl+ an die gesamte Prozessgruppe im Vordergrund CsendetSIGINT
.Gnuchess könnte in einer eigenen Prozessgruppe sein, weil es sich selbst zum Sitzungsleiter gemacht hat (aber ich weiß nicht, warum es das tun würde) oder weil Sie es doppelt gegabelt haben (Python gabelt eine Shell, die Gnuchess gabelt). Eine Doppelgabel ist wahrscheinlich vermeidbar, aber ich kann Ihnen nicht sagen, wie, ohne Ihren Code zu sehen.
Eine einigermaßen zuverlässige und POSIX-konforme Methode zum Ermitteln der PID des
gnuchess
Prozesses istBestimmte Unix-Varianten haben möglicherweise bessere Möglichkeiten, dies zu erreichen, wie z
pgrep
.quelle
Versuchen:
quelle