2013-06-26 41 views
0

我有写至标准错误这样一个简单的Python程序::退出后为什么后台程序死机?

import sys 
import time 
while 1: 
    time.sleep(10) 
    sys.stderr.write('.') 

当我运行这个背景,然后从bash的注销,似乎它死的第一次写入标准错误。

$ python err.py & 
[1] 25546 
$ ..logout 

huponexit已关闭,我可以确认另一个终端,该程序在注销后仍处于活动状态。

我的问题是“为什么在写入stderr后才退出?”

回答

1

stderr最初连接到终端。注销后,操作系统将撤消您对该终端的访问(这是Unix 会话管理的一部分),并且尝试写入该终端会导致SIGHUP信号被发送到该进程,并且其默认操作是杀死该过程。

如果将stderr重定向到一个文件,它应该继续运行。

+0

一个很好的解释。有一个名为“nohup”(GNU coreutils和一些shell的一部分)的实用程序,该实用程序用于在注销后保持程序运行的情况。 –

+0

他说'huponexit'已关闭。如果他已经这样做了,他不需要使用'nohup',只是将输出从终端重定向。 – Barmar

+0

谢谢@Barmar您的明确解释。它真的清除了我的头。 – quiver

相关问题