Python程序执行shell命令并关闭进程-总结
需求说明
linux下,有时候我们用Python3执行一个shell命令,这会开启一个进程。
但是这个进程可能能不会主动关闭(比如Linux下的ping指令会一直持续执行),我们希望这个进程执行指定时间后就终止。
重点不是开启一个进程执行shell指令,是找到进程号,并精准杀死这个进程,找了好多资料才试验成功,这里做一个记录。
代码
Python3:
#!/usr/bin/python3
import subprocess
import time
import os
import signal
cmd = 'ping www.baidu.com' #替换为你想要执行的指令
p = subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
print("PID: ",p.pid)
print("Sleep now...")
time.sleep(15) # 假设我们指定程序执行15s,然后杀死它
p.terminate()
p.wait()
os.killpg(p.pid, signal.SIGTERM)
print("End")