终止os.multiprocessing内部的系统调用



我通过multprocessing.Processos.system运行两个命令。其中一个命令是adb logcat,它产生日志,直到SIGTERM或CTRL+C。如何终止操作系统。system命令在Process?

示例代码:

import time
import os
from multiprocessing import Process
def run_instrument():
while True:
time.sleep(3)
def run_logcat():
logcat_cmd = "adb logcat -s Engine:I"
os.system(logcat_cmd)
logcat_proc = Process(target=run_logcat)
logcat_proc.start()
inference_proc = Process(target=run_instrument)
inference_proc.start()
inference_proc.join(5)
logcat_proc.terminate()

调用terminate后,adb logcat仍然通过ps aux存在于系统中。

经过谷歌搜索,我找到了解决方案。当我决定终止进程时,我应该先找到它的子进程,然后再终止它的子进程。为了得到孩子,我使用psutil:

import time
import os
import signal
from multiprocessing import Process
import psutil
def run_instrument():
while True:
time.sleep(3)
def run_logcat():
logcat_cmd = "adb logcat -s Engine:I"
os.system(logcat_cmd)
logcat_proc = Process(target=run_logcat)
logcat_proc.start()
logcat_pid = logcat_proc.pid
inference_proc = Process(target=run_instrument)
inference_proc.start()
inference_proc.join(5)
inference_proc.terminate()
current_process = psutil.Process(logcat_pid)
children = current_process.children(recursive=True)
for child in children:
os.kill(child.pid, signal.SIGTERM)
logcat_proc.terminate()

最新更新