改变已经运行过程的信号配置(SIGHUP)

时间:2011-05-22 19:17:42

标签: linux

假设我在后台启动了Linux进程。它不是一个守护进程,只是一个实用程序。 如果它获得SIGHUP,它就会被杀死。

我没有采取“nohup”预防措施。它花费的时间比我想象的要长很多 运行4小时后,ssh会话可能会断开连接。但我不想失去这个过程 我想防止它被SIGHUP杀死。

是否可以使等效的

   signal(SIGHUP, SIG_IGN); 

到这个过程而不重新启动它?

由于

2 个答案:

答案 0 :(得分:3)

使用disown(1)

  

disown:disown [-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

  

“disown”是一个内置的bash   从shell中删除shell作业   工作清单。这基本上意味着什么   你不能用“fg”,“bg”就可以了   不再,但更重要的是,什么时候   你关闭你的shell它不会挂起或   再向该孩子发送一个SIGHUP。   与“nohup”不同,之后使用“disown”   这个过程已经启动了   背景执行。

答案 1 :(得分:2)

Diswon是目前的好解决方案。 对于未来,一个很好的解决方法是使用“屏幕”工具:如果您的ssh会话断开连接,您可以重新连接并重新获取仍在运行的屏幕。

但是,我不知道如何将当前进程拉入屏幕会话,因此无法解决您当前的情况。