假设我在后台启动了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