nohup

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup 是 no hang up 的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

&

  1. & : 指在后台运行
  2. nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

使用

  1. sh test.sh &
    将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。
  2. nohup sh test.sh
    将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
  3. nohup sh test.sh &
    将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

遇到的问题

/**
 * 忽略输入并将输出附加到`nohup.out`,程序也能正常启动
 * 
 * 如果不想看到这个提示可以使用:
 * nohup sh test.sh >test.log 2>& 1 &
 * 或者
 * nohup sh test.sh &>test.log &
 * 
 * 如果不想输入到test.log可以使用
 * nohup sh test.sh >/dev/null 2>& 1 &
 * 
 * nohup放到命令开头表示不挂起,表示即使退出终端该进程也不会掉, & 放在命令到结尾,表示后台运行
 *      /dev/null 表示空设备文件 (位桶(bit bucket)或者黑洞(black hole)的地方)
 *      0 表示stdin标准输入
 *      1 表示stdout标准输出
 *      2 表示stderr标准错误
 *      2>&1标识将错误输出重定向到标准输出,注意>& 不能分开
 */
nohup: ignoring input and appending output to 'nohup.out'