文章目录
- 1.nohup 的使用
- 2.后台运行符 &的使用
- 3.总结
1.nohup 的使用
作用:当你在终端执行命令脚本,当脚本没有执行完,如果你关闭终端,那么跟随这个终端有关的进程都会退出执行,nohup 命令的作用就是让使用此命令的脚本可以脱离终端继续执行,不受终端退出的影响。
命令:
nohup bash shell_script.sh
nohup ./shell_script.sh
示例脚本:shell_script.sh
打印1-20的整数,打印时间间隔为1s
#!/bin/bash
for t in {
1..20}
do
sleep 1
echo $t
done
执行:
使用nohup命令执行脚本后你会发现,此时终端处于不可交互状态(不能输入命令),要等待脚本执行完才会切换为可交互。此时终端不会有打印,打印被追加重定向到脚本所在目录的nohup.out中去了(如果在此目录下使用nohup命令执行多个脚本,则nohup.out打屏日志会出现重叠,建议相同目录执行多个脚本的时候自己重定向,之后可以关闭终端,查看打屏输出可以另外开启终端执行:tail -f nohup.out)。在此时终端ctrl+c,可停止进程,如果关闭终端,则此脚本会继续执行直至结束。
_关闭终端后执行结果的输出_:脚本执行完毕
_在同一个目录使用nohup执行多个脚本_:nohup.out输出重叠
2.后台运行符 &的使用
作用:在终端执行命令时,以后台进程来执行脚本或者命令,不会影响你接下去的命令输入执行
命令:
bash shell_script.sh &
./shell_script.sh &
示例脚本:shell_script2.sh
#!/bin/bash
for t in {
1..20}
do
sleep 1
echo $t
done > result.txt
执行:
可以看到在执行命令:bash shell_script2.sh & 后终端还是可以交互输入的。并没有等到脚本执行完才能输入。返回的4480是后台运行脚本的进程号。终止此进程可以使用kill -9 4480 如果你在后台4480进程没有执行完前关闭此终端,则此进程会结束。这个就是和nohup命令不同的地方。
3.总结
在实际使用的过程中两个集合使用更加方便: nohup bash shell_script.sh &
当你在使用xshell 或者MobaXterm等终端模拟软件打开多个终端执行命令的时候就可以使用上述的命令,这样就不会有N个窗口打开着挂载着任务了,眼不见心不烦