做事
myProcessIsRunning = poll() is None
正如主要答案所建议的那样,这是检查进程是否正在运行的推荐方法和最简单的方法。 (它也适用于 jython)
如果您手头没有流程实例来检查它。
然后使用操作系统的TaskList/Ps进程。
在 Windows 上,我的命令如下所示:
filterByPid = "PID eq %s" % pid
pidStr = str(pid)
commandArguments = ['cmd', '/c', "tasklist", "/FI", filterByPid, "|", "findstr", pidStr ]
这本质上与下面的命令行做同样的事情:
cmd /c "tasklist /FI "PID eq 55588" | findstr 55588"
在 linux 上,我使用以下代码执行完全相同的操作:
pidStr = str(pid)
commandArguments = ['ps', '-p', pidStr ]
根据是否找到进程,ps 命令已经返回错误代码 0 / 1。在 Windows 上,您需要 find string 命令。
这与以下堆栈溢出线程中讨论的方法相同:
Verify if a process is running using its PID in JAVA
注意:
如果您使用这种方法,请记住将您的命令调用包装在 try/except 中:
try:
foundRunningProcess = subprocess.check_output(argumentsArray, **kwargs)
return True
except Exception as err:
return False
注意,如果您使用 VS Code 并使用纯 Python 和 Jython 进行开发,请小心。
在我的环境中,我错觉 poll() 方法不起作用,因为我怀疑必须结束的进程确实正在运行。
这个过程启动了 Wildfly。在我要求停止 wildfly 后,shell 仍在等待用户“按任意键继续......”。
为了完成这个过程,在纯 python 中,以下代码正在运行:
process.stdin.write(os.linesep)
在 jython 上,我必须将这段代码修复为如下所示:
print >>process.stdin, os.linesep
有了这个不同,这个过程确实完成了。
jython.poll() 开始告诉我该过程确实完成了。