【发布时间】:2018-05-19 11:10:15
【问题描述】:
经过一些研究,对于如何让子进程了解父进程在 Windows 下已经死亡/崩溃/退出,这可能使子进程在无人看管的情况下运行,没有明确的答案。有一些建议如下:
总是涉及一个已经生了孩子的已知父母。但也有孩子不知道自己是孩子的情况,因为它没有被认为是孩子,父母也没有努力杀死孩子。
此外,没有对父级的控制。实际案例:
- 在 Windows 下运行的 Cygwin
- Windows Python 路径中的第一个
- Python 可执行文件通过
setuptoolsentry_points 工具安装。
如上所述,要执行的 Python 是 Windows 的。 setuptools 生成的可执行文件将找到它并使用相关脚本将其作为子进程执行。
因为是在 Cygwin 下运行的,所以以下可能会失败:
- 按
Ctrl-c将杀死父级(存根 setuptools 可执行文件) - 但会让子进程继续运行(在进程列表中以
python.exe的形式找到)
在这种情况下,如上所述,无法控制父级并且子级不知道自己是子级(因为它也可能直接作为 Python 脚本执行)
【问题讨论】:
-
setuptools EXE 包装器有缺陷且已过时。只要有可能,构建/安装一个 wheel 包,它 pip 使用来自 distlib 的 EXE 存根安装。这些启动器使用 Job 对象来确保子进程与父进程一起终止。
-
pip install -e .
标签: python windows python-3.x subprocess