我退出后保持linux进程运行

Modified on: Wed, 13 Nov 2019 15:20:02 +0800

我正在通过SSH连接到Linux机器,而我正在尝试运行一个繁重的bash脚本来进行文件系统操作。它预计会持续运行数小时,但由于我的互联网连接问题,我无法打开SSH会话。

我怀疑使用后台运算符运行脚本,&符号(&)会做到这一点,因为我尝试了它,后来发现进程没有完成。如何注销并保持流程正常运行?

最佳答案

最好的方法是在终端多路复用器中启动该过程。或者,您可以使过程不接收HUP信号。


终端多路复用器提供独立于“真实”终端运行的“虚拟”终端(实际上今天的所有终端都是“虚拟的”,但这是另一天的另一个主题)。即使您的真实终端已通过ssh会话关闭,虚拟终端也将继续运行。

从虚拟终端启动的所有进程将继续与该虚拟终端一起运行。当您重新连接到服务器时,您可以重新连接到虚拟终端,除了通过的时间之外,一切都会好像没有发生任何事情。

两个流行的终端多路复用器是屏幕tmux

屏幕有一个陡峭的学习曲线。这是一个很好的教程,附图解释了这个概念:http:// www。 ibm.com/developerworks/aix/library/au-gnu_screen/


终端将HUP信号(或SIGHUP)发送到其所有子进程当终端关闭时。接收SIGHUP时的常见操作是终止。因此,当您的ssh会话断开连接时,您的所有进程都将终止。为避免这种情况,您可以使您的流程无法获得SIGHUP。

这样做的两种简单方法是nohup和< a href =“https://en.wikipedia.org/wiki/Disown_(Unix)”rel =“nofollow noreferrer”> disown

有关nohupdisown的工作原理的详细信息,请阅读以下问题并解答:https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

注意:虽然进程将继续运行,但您无法再与它们进行交互,因为它们不再连接到任何终端。此方法主要用于长时间运行的批处理过程,一旦启动,不再需要任何用户输入。

作者:Community,lesmana

相关问答

添加新评论