Python:终止子进程=成功,但它仍在运行(?)

标签 python python-2.7

我有一个简单的脚本,它调用另一个 python 脚本作为子进程。我可以确认子进程已启动并且可以获取其 PID。

当我尝试终止子进程(在 win 中)时,我收到针对正确 PID 的 SUCCESS 消息,但 Windows 任务管理器显示第二个 python.exe 进程仍在运行。

对于在 Win 中完成此任务有什么建议吗?我最终会将其扩展到 OSX 和 Linux 中:

简化:

#!/usr/bin/env python

import os, sys
import subprocess
from subprocess import Popen, PIPE, STDOUT, check_call

pyTivoPath="c:\pyTivo\pyTivo.py"

print "\nmyPID: %d" % os.getpid()

## Start pyTivo ##
py_process = subprocess.Popen(pyTivoPath, shell=True, stdout=PIPE, stderr=subprocess.STDOUT)
print "newPID: %s" % py_process.pid

## Terminate pyTivo ##  
#py_process.terminate() - for nonWin (?)
py_kill = subprocess.Popen("TASKKILL /PID "+ str(py_process.pid) + " /f") 

raw_input("\nPress Enter to continue...")

注意:需要Python2.7,psutils不可用

最佳答案

在我的实现中,以下内容实际上在 Windows 中创建了两个进程(“cmd.exe”和“python.exe”)。

py_process = subprocess.Popen(pyTivoPath, shell=True, stdout=PIPE, stderr=subprocess.STDOUT)

注意到“python.exe”进程是“cmd.exe”进程的子进程,我将“/T”(树终止)开关添加到我的 TASKKILL 中:

py_kill = subprocess.Popen("TASKKILL /PID "+ str(py_process.pid) + " /f /t") 

这会产生有效杀死 python 子进程的预期效果。

关于Python:终止子进程=成功,但它仍在运行(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866819/

相关文章:

python-2.7 - Docker for nltk的HOME目录?

python - BDB Python接口(interface)读取BDB时出错

python - 尝试使用 ctypes 调用 wincred api

python - 线程似乎按顺序运行线程

Django - 检查模型是否有子级(相关模型)

Python 正则表达式未按预期工作

python-2.7 - Azure 自动化 : Parse WEBHOOKDATA with a python runbook

python - 如何使用 python 或 perl 通过 ssh 在另一个 shell 中发送命令

python - 我需要为一个简单的网站使用网络框架吗?

python - 字符串python元素的所有排列