2011-07-01 14 views

Odpowiedz

27

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.

-1

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.

+0

Nr "signal.SIGKILL" jest właściwą stałą do użycia. –

+0

os.kill (pid, 9) działa dla mnie, używam python 2.7 na centos 5.6 –

+3

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. –

11

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() 
4

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)) 
Powiązane problemy