na przykład z bash:jak zabić proces i procesy potomne z Pythona?
kill -9 -PID
os.kill(pid, signal.SIGKILL)
tylko zabić proces nadrzędny.
na przykład z bash:jak zabić proces i procesy potomne z Pythona?
kill -9 -PID
os.kill(pid, signal.SIGKILL)
tylko zabić proces nadrzędny.
Po przejechaniu negatywny PID do kill
, to faktycznie wysyła sygnał do procesu grupa przez tego numeru (absolutny). Odpowiadasz w wersji os.killpg()
w języku Python.
Powinieneś użyć parametru sygnału 9, aby zabić drzewo procesu.
root @ localhost: ~ $ python
> > > import os
> > > os.kill (PID, 9)
czy należy użyć signal.SIGKILL stałe, należy użyć os.killpg (pgid , signal.SIGKILL), aby zabić drzewo procesu.
Jeśli proces nadrzędny nie jest "grupą procesów", ale chcesz go zabić z dziećmi, możesz użyć psutil (https://pythonhosted.org/psutil/#processes). os.killpg nie może zidentyfikować pid grupy nieprocesowej.
import psutil
parent_pid = 30437 # my example
parent = psutil.Process(parent_pid)
for child in parent.children(recursive=True): # or parent.children() for recursive=False
child.kill()
parent.kill()
Innym rozwiązaniem, jeśli proces nie jest grupą proces i nie chcą używać psutil, to uruchomienie tego polecenia powłoki:
pkill -TERM -P 12345
na przykład z
os.system('pkill -TERM -P {pid}'.format(pid=12345))
Nr "signal.SIGKILL" jest właściwą stałą do użycia. –
os.kill (pid, 9) działa dla mnie, używam python 2.7 na centos 5.6 –
Tak, 'os.kill (pid, 9)' działa, gdy 'signal.SIGKILL' dzieje się' 9', co jest na większości platform. Niemniej jednak, 'signal.SIGKILL' jest właściwą stałą do użycia i użycie' 9' zamiast 'signal.SIGKILL' nie jest ulepszeniem, ani nie rozwiązuje w żaden sposób problemu OP. –