如何在Windows平台上的python3中知道子进程何时死亡?

时间:2017-12-15 09:28:28

标签: python process synchronization subprocess

在linux中,我使用 subprocess.Popen 创建子进程,并为 SIGCHLD 定义信号处理程序。当子进程死亡时,父进程收到 SIGCHLD 信号,处理程序将执行某事。

但是在Windows上没有 SIGCHLD 信号,我怎么知道子进程何时退出?

1 个答案:

答案 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()