使用场景:一般我们都会使用 XShell 等终端模拟软件连接 Linux 服务器,但是在运行比较长时间的脚本(特别是一些 HiveQL 脚本)的时候,往往都要跑上个把小时甚至更长,这期间如果关闭终端窗口,运行的进程就会被杀死。使用 nohup 命令可以使进程不受终端窗口的影响。
1 使用实例
使用 nohup 命令提交作业,在缺省情况下该作业的所有输出都被重定向到一个名为 nohup.out 的文件中(默认在当前目录下,如果文件不可写,输出重定向到 $HOME/nohup.out 文件中),除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
之后可以使用命令tail -f myout.file
实时查看 command 的运行情况。
2 为什么nohup命令最后要加个 & 呢
这里要说明下 nohup 与 & 的功能区别:
& 的意思是在后台运行,用 Ctrl+C 无法杀死后台进程。但是如果 XShell 关闭的话,后台进程同样会被杀死。
相反,如果 nohup 最后不加 & ,使用 Ctrl+C 是可以杀死 command 的。所以要让进程真正不受 XShell 中 Ctrl+C 和关闭终端窗口的影响,需要二者组合使用。