代码
python">import argparse
import logging
import signal
import threading_c = threading. RLock( )
logger = logging. getLogger( name= "[ProcessManager]" )
logger. setLevel( logging. DEBUG)
consoleHandler = logging. StreamHandler( )
consoleHandler. setLevel( logging. DEBUG)
formatter = logging. Formatter( '\033[32m %(asctime)s - %(name)s - %(levelname)s - %(message)s \033[0m ' )
consoleHandler. setFormatter( formatter)
logger. addHandler( consoleHandler) def kill_process ( pid, sig= signal. SIGTERM, child_only= False ) : """默认: 杀死进程极其子进程:param pid: 待杀死的进程ID:type pid: int:param sig: 杀死进程时使用的信号, 参考 Signal_:type sig: int:param child_only: 是否仅杀死子进程, 而保留该进程:type child_only: bool""" import psutil_c. acquire( ) try : p = psutil. Process( pid) process_list = p. children( True ) try : if not child_only: p. send_signal( sig) logger. info( "[Stop] kill father_pid:{pid} success" . format ( pid= pid) ) except psutil. NoSuchProcess: pass for sub_process in process_list: try : sub_process. send_signal( sig) logger. info( "[Stop] kill child_pid:{pid} success" . format ( pid= sub_process. pid) ) except psutil. NoSuchProcess: pass finally : _c. release( ) if __name__ == '__main__' : """代码执行:python stop.py -p 1234""" parser = argparse. ArgumentParser( ) parser. add_argument( "-p" , "--pid" , dest= "Pid" , help = "kill进程" , type = int ) ns = parser. parse_known_args( ) [ 0 ] pid = ns. Pidif pid: kill_process( pid, sig= signal. SIGKILL) logger. info( "[Stop] finished" )