2011-05-22 39 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

相关问题