2011-05-22 46 views
2

假設我在後臺啓動了Linux進程。它不是一個守護進程,只是一個實用程序。 如果它得到SIGHUP,它會被殺死。改變已經運行的進程的信號配置(SIGHUP)

我沒有采取「nohup」的預防措施。它比我想象的要耗費更多的時間。
運行4小時後,ssh會話可能會斷開連接。但我不想失去這個過程。
我想阻止它被SIGHUP殺死。

是否有可能使

signal(SIGHUP, SIG_IGN); 

這個過程等同,而不需要重啓?

感謝

回答

3

使用disown(1)

不認:認[-h] [-ar] [JOBSPEC ...] 從當前shell刪除作業。

Removes each JOBSPEC argument from the table of active jobs. Without 
any JOBSPECs, the shell uses its notion of the current job. 

Options: 
    -a  remove all jobs if JOBSPEC is not supplied 
    -h  mark each JOBSPEC so that SIGHUP is not sent to the job if 
      the shell receives a SIGHUP 
    -r  remove only running jobs 

Detaching a process from terminal, entirely

「斷絕關係」 是一個bash內置的是 去除外殼的 作業列表中殼工作。這基本上意味着 ,你不能再使用「fg」,「bg」 了,但更重要的是,當你關閉你的shell時,它不會掛起或者 發送一個SIGHUP給那個孩子了。 與「nohup」不同,在 過程已啓動且 背景後使用「disown」。

2

Diswon是這次的優秀解決方案。 未來,一個很好的解決方法是使用「屏幕」工具:如果您的ssh會話斷開連接,您可以重新連接並重新獲取仍在運行的屏幕。

但是,我不知道將當前進程拉入屏幕會話的方式,所以它不會解決您當前的情況。

+2

['reptyr'](https://github.com/nelhage/reptyr)是一個非常令人厭惡的黑客,它可以切換已經運行的進程的控制終端。 – caf 2011-05-23 05:44:04

+0

感謝您的提示 – Bruce 2011-05-23 11:07:40