假设我在后台启动了Linux进程。它不是守护进程,只是一个实用程序。如果它得到了SIGHUP,它就会被杀死。
我没有采取"nohup“预防措施。它花费的时间已经比我想象的要长得多了。
运行4小时后,ssh会话可能会断开连接。但我不想失去这个过程。
我想防止它被SIGHUP杀死。
有没有可能制造出等同于
signal(SIGHUP, SIG_IGN); 在不重新启动的情况下将其添加到此进程?
谢谢
发布于 2011-05-23 03:23:11
使用disown(1)
拒绝:拒绝-h工作规范...从当前shell中删除作业。
从活动作业的表中删除每个JOBSPEC参数。在没有任何JOBSPEC的情况下,shell使用其当前作业的概念。选项:-a如果没有提供JOBSPEC,则删除所有作业-h标记每个JOBSPEC,这样,如果shell收到SIGHUP -r,则不会向作业发送SIGHUP仅删除正在运行的作业
Detaching a process from terminal, entirely
"disown“是一个bash内置函数,用于从shell的作业列表中删除shell作业。这基本上意味着你不能再对它使用"fg","bg“,但更重要的是,当你关闭你的shell时,它不会挂起,也不会再向那个孩子发送SIGHUP。与"nohup“不同的是,"disown”是在进程启动和后台运行后使用的。
发布于 2011-05-23 03:39:23
Diswon是这次很好的解决方案。将来,一个很好的解决方法是使用" screen“工具:如果您的ssh会话断开,您可以重新连接并重新获取仍在运行的屏幕。
但是,我不知道如何将当前进程放入屏幕会话中,因此它不能解决您当前的情况。
https://stackoverflow.com/questions/6090160
复制相似问题