linux nohup和&用法
nohup和&用法
简介
-
nohup 是 no hang up 的缩写,意思是不挂断运行(指退出账号),永久运行下去,但是注意并没有后台运行的功能。
-
& 是在后台运行的意思
nohup Command [ Arg ... ] [ & ]
单独使用nohup
nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,中断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思
-
前面不显示进程号
-
有一个 "忽略输入,输出至nohup.out" 的提示
-
输出不会出现在前台
-
关掉SSH连接,程序不会关闭
-
Ctrl +C,程序收到SIGINT信号后,直接关闭
查看nohup.out文件,发现程序的输出结果躺在nohup.out中
指定输出到文件中
nohup Command & 默认输出到nohup.out文件
nohup Command > outputfile 2>&1 & 指定输出到output文件
# 一个 > 就行
> 代表重定向到哪里,如 echo "123" > ./123.txt
操作系统中有三个常用的流:
- 0:标准输入流 stdin
- 1:标准输出流 stdout
- 2 :标准错误流 stderr
2>&1的解释
把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有
单独使用&
&是指在后台运行,当中断SSH时,命令自动也跟着退出
-
前面会显示进程号
-
键入Ctrl + C,发出SIGINT信号,程序会继续运行
-
关掉SSH连接,程序收到SIGINT信号后,直接关闭
使用nohup和&联合运行
nohup COMMAND &
使得命令永久的在后台执行
特点:
-
终端显示中会出现进程号
-
出现 "忽略输入,输出至nohup.out" 的提示
-
键入Ctrl + C,发送SIGINT信号,不会关闭
-
关闭SSH连接,发送SIGHUP信号,不会关闭进程
总结
使用&后台运行程序:
- 结果会输出到终端
- 使用Ctrl + C发送SIGINT信号,程序免疫
- 关闭SSH,发送SIGHUP信号,程序关闭
使用nohup运行程序:
- 结果默认会输出到nohup.out
- 使用Ctrl + C发送SIGINT信号,程序关闭
- 关闭SSH,发送SIGHUP信号,程序免疫
使用nohup和&配合来启动程序:
- 同时免疫SIGINT和SIGHUP信号