假設我在後臺啓動了Linux進程。它不是一個守護進程,只是一個實用程序。 如果它得到SIGHUP,它會被殺死。改變已經運行的進程的信號配置(SIGHUP)
我沒有采取「nohup」的預防措施。它比我想象的要耗費更多的時間。
運行4小時後,ssh會話可能會斷開連接。但我不想失去這個過程。
我想阻止它被SIGHUP殺死。
是否有可能使
signal(SIGHUP, SIG_IGN);
這個過程等同,而不需要重啓?
感謝
假設我在後臺啓動了Linux進程。它不是一個守護進程,只是一個實用程序。 如果它得到SIGHUP,它會被殺死。改變已經運行的進程的信號配置(SIGHUP)
我沒有采取「nohup」的預防措施。它比我想象的要耗費更多的時間。
運行4小時後,ssh會話可能會斷開連接。但我不想失去這個過程。
我想阻止它被SIGHUP殺死。
是否有可能使
signal(SIGHUP, SIG_IGN);
這個過程等同,而不需要重啓?
感謝
使用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」。
Diswon是這次的優秀解決方案。 未來,一個很好的解決方法是使用「屏幕」工具:如果您的ssh會話斷開連接,您可以重新連接並重新獲取仍在運行的屏幕。
但是,我不知道將當前進程拉入屏幕會話的方式,所以它不會解決您當前的情況。
['reptyr'](https://github.com/nelhage/reptyr)是一個非常令人厭惡的黑客,它可以切換已經運行的進程的控制終端。 – caf 2011-05-23 05:44:04
感謝您的提示 – Bruce 2011-05-23 11:07:40