【发布时间】:2014-01-30 06:32:39
【问题描述】:
在 Windows 7 机器上:-
我有一个在命令提示符 [主进程] 上启动的主 (Python) 程序。
此程序生成一个子 (Python) 程序 [子进程]。
我关闭命令提示符。
结果:-
- 子进程立即结束。
另一方面,如果我从任务管理器结束主程序,我观察到子进程仍在运行。
我想知道为什么这两种方法没有相同的结果?在这两种情况下是否发送了一些不同的信号?
【问题讨论】:
-
您在哪个平台上工作?如果是 POSIX,当控制进程退出时,SIGHUP(挂断)被发送到它的所有子进程(可能会或可能不会真正终止它们)。据推测,在“任务管理器”环境中,父进程并未成为控制进程。请参阅Consequences of Process Termination 和相关信息。
-
AFAIK 当你关闭一个终端时,它会关闭所有附加到它的进程。您应该将子进程与终端分离(例如,将其守护)。
-
@JonathanLeffler 我正在使用 windows(win7) 操作系统。浏览了您引用的文档,它主要处理 POSIX 信号处理。
-
这就是为什么确定你在哪里工作很重要。规则完全不同,适用于 Unix(POSIX、Linux)的规则不一定适用于 Windows,反之亦然。
-
子进程在启动时分配给命令窗口。 Windows API 允许您指定子进程获得一个新窗口,或者没有窗口。希望 Python 在启动新进程时为您提供相同的选项。 (Windows API 还允许程序在启动后更改命令窗口,但我不知道 Python 是否将其公开给程序员。)
标签: python windows signals process-management