nohup和&
nohup
nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup 是 no hang up 的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
&
- & : 指在后台运行
- nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
使用
- sh test.sh &
将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。 - nohup sh test.sh
将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。 - 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'