解决Linux关闭终端(关闭SSH等)后运行的程序自动停止

  • 摘要:有的时候我们需要长时间地运行backgroundprograms,而且不希望程序退出,今天我们要来看一下如何在linux环境下来实现这个目的。我的演示环境是Ubuntu16.04LTS。首先第一种办法,使用系统命令:$nohupcommand>/dev/null2>&;1&;其中command是我们要运行的命令,需要我们替换上去。(比如我们要运行一个名为EagleJobDispatcher的程序,那么以上命令就是$nohup./EagleJobDi
  • 有的时候我们需要长时间地运行background programs,而且不希望程序退出,今天我们要来看一下如何在linux环境下来实现这个目的。

    我的演示环境是Ubuntu 16.04 LTS。

    首先第一种办法,使用系统命令:

    $ nohup command > /dev/null 2>&;1 &;

    其中command是我们要运行的命令,需要我们替换上去。(比如我们要运行一个名为EagleJobDispatcher的程序,那么以上命令就是

    $ nohup ./EagleJobDispatcher > /dev/null 2>&;1 &;
    1. nohup的意思是即使登出也不会终止该进程。

    2. > /dev/null意思是将stdout引导到/dev/null这个不存在的设备(所以程序的输出将不会被记录)。

    3. 2>&;1的意思是stderr也引导至stdout,而stdout已经被引导至/dev/null。我们可以用一个文件路径来替换&;1,用以保存程序的错误信息,比如2>/tmp/errorLogs。

    4. 最后的&;表示我们希望这个程序在后台运行。


    第二种方法,我们需要使用screen这个程序。首先我们需要安装screen:

    $ sudo apt-get install screen

    完成后我们输入screen,回车后进入screen的提示信息后再按回车来进入。接下来我们输入我们要运行的命令:

    $ ./EagleJobDispatcher

    当程序开始运行后,我们输入Ctrl + A,然后按D键来detach,完成后screen会脱离:

    [screen is terminating]

    然后我们可以输入

    $ screen -ls

    来查看我们运行的进程:

    $ screen -lsThere is a screen on: 29478.pts-8.localhost (08/25/2017 08:35:16 AM) (Detached)1 Socket in /var/run/screen/S-root.

    screen的强大在于我们可以再回到运行的程序里,而第一种方法是不可以的:

    $ screen -r 29478.pts-8.localhost

    现在就算我们关闭terminal我们的程序依然会持续运行,如果需要关闭我们再通过以上命令回到程序退出即可。

猜你喜欢

转载自blog.csdn.net/qq_39785798/article/details/80813648
今日推荐