我正在通过SSH连接到
Linux机器,我正在尝试运行一个重量级的bash脚本来进行文件系统操作.预计它会持续运行数小时,但由于我的互联网连接问题,我不能让SSH会话保持打开状态.
我怀疑使用后台运算符运行脚本,&符号(&)会做的伎俩,因为我尝试了它,后来发现进程没有完成.如何注销并保持进程运行?
解决方法
最好的方法是在终端多路复用器中启动该过程.或者,您可以使过程不接收HUP信号.
A terminal multiplexer提供独立于“真实”终端运行的“虚拟”终端(实际上今天所有终端都是“虚拟”,但这是另一天的另一个主题).即使您的真实终端已使用ssh会话关闭,虚拟终端也将继续运行.
从虚拟终端启动的所有进程将继续与该虚拟终端一起运行.当您重新连接到服务器时,您可以重新连接到虚拟终端,除了通过的时间之外,一切都将好像什么也没发生.
屏幕有一个陡峭的学习曲线.这是一个很好的教程,图解释了这个概念:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
当终端关闭时,终端将HUP信号(或SIGHUP)发送到其所有子进程.接收SIGHUP时的常见操作是终止.因此,当您的ssh会话断开连接时,您的所有进程都将终止.为避免这种情况,您可以使您的流程无法获得SIGHUP.
有关nohup和disown如何工作的更多信息,请阅读此问题和答案:https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
注意:虽然进程将继续运行,但您无法再与它们进行交互,因为它们不再连接到任何终端.此方法主要用于长时间运行的批处理过程,一旦启动,不再需要任何用户输入.