2013-06-26 56 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

相關問題