在linux中,我使用 subprocess.Popen 创建子进程,并为 SIGCHLD 定义信号处理程序。当子进程死亡时,父进程收到 SIGCHLD 信号,处理程序将执行某事。
但是在Windows上没有 SIGCHLD 信号,我怎么知道子进程何时退出?
答案 0 :(得分:0)
您可以使用TASKLIST FI(过滤器)方法验证给定的pid是否存在。 所以这个想法是
1)生成process.pid
2)通过TASK列表过滤功能
查看PID的状态e.g。
TASKLIST / FI“PID eq 6228”
3)杀死pid
4)再次看到pid的状态,它应该不存在
下面是代码,它将执行相同的
from subprocess import Popen,PIPE,CREATE_NEW_CONSOLE
import subprocess
command='cmd /K '
#This will open a new command prompt window
p1=Popen(command,creationflags=subprocess.CREATE_NEW_CONSOLE)
#printing the pid value
print p1.pid
# created a function to Verify if the pid exist
def check_pid():
command1="TASKLIST /FI "+ '"PID eq '+ str(p1.pid)+'"'
p2=Popen(command1,stdout=PIPE)
out=p2.communicate()[0]
print out
#Kill the pid
import subprocess
subprocess.Popen('taskkill /F /T /PID %i' % p1.pid)
#wait for some time and see if the pid exist
import time
time.sleep(3)
check_pid()