文章目录
- 0、背景
- 1、作用
- 2、语法
- 3、用法演示
- 4、关于2>&1
0、背景
Shell中,执行一个持续进行的指令,会"霸屏",即你想再执行其他指令,要么重开个shell终端,要么退出这个执行。
1、作用
nohub,即 no hang up(不挂起),用于在系统后台不挂断地运行命令,Ctrl + C退出终端后命令依旧执行。
2、语法
nohup Command [ Arg … ] [ & ]
参数释义:
-
Command:你需要要执行和挂起的命令
-
Arg:一些参数,用来指定输出文件的位置
-
&
:让命令在后台执行,终端退出后命令仍旧执行,末尾加一下就行
关于Arg参数:
- 如果该参数为空,则运行结果或者日志输出到nohup.out 的文件到
当前目录下
- 当前用户对当前目录没有写权限,则重定向到
$HOME/nohup.out
目录下 - 可加重定向符号到一个自定义文件,
> server.log
3、用法演示
写个测试的小脚本test1.sh:
# !/bin/bash
while true
do
echo "testing..."
sleep 2s
done
# chmod +x xx.sh加下执行权限
以下即输出到当前目录下的nohup.out,返回appending output to nohup.out即执行成功。
查看nohup.out,确实是每隔两秒输出一句testing…
此时,想中止执行,可杀掉对应的进程。ps -ef返回的第二列即PID
。
ps -ef |grep -i key
kill -9 PID
ps -ef看到有两个test1.sh相关的进程,杀完第一个后,杀第二个,杀半天也不行,诡异的是它的PID一直在变,然后。。恍然大悟,这TM是gerp的进程,因为我过滤关键字带了test1.sh才显示。。。。。
4、关于2>&1
nohup java -jar springboot-xxx.jar > server.log 2>&1 &
2>&1即将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
- 0 : stdin (standard input,标准输入)
- 1 : stdout (standard output,标准输出)
- 2 : stderr (standard error,标准错误输出)