假设我在后台启动了Linux进程。它不是一个守护进程,只是一个实用程序。 如果它获得SIGHUP,它就会被杀死。
我没有采取“nohup”预防措施。它花费的时间比我想象的要长很多 运行4小时后,ssh会话可能会断开连接。但我不想失去这个过程 我想防止它被SIGHUP杀死。
是否可以使等效的
signal(SIGHUP, SIG_IGN);
到这个过程而不重新启动它?
由于
答案 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会话断开连接,您可以重新连接并重新获取仍在运行的屏幕。
但是,我不知道如何将当前进程拉入屏幕会话,因此无法解决您当前的情况。