nohup 命令的功能是在不挂端的情况下执行命令,默认会输出一个 nohup.out 的文件。
用法:
nohup COMMAND [ARG]...
nohup OPTION
如果标准输入是终端,则将其从不可读的文件中重定向。 如果标准输出是终端,则尽可能将输出附加到“nohup.out”,否则附加到“$HOME/nohup.out”。 如果标准错误是终端,则将其重定向到标准输出。 要将输出保存到 FILE,请使用“nohup COMMAND > FILE”。
选项
--help 帮助文档
--version 版本信息
使用示例:
写一个实例脚本,每一秒输出一个数字,数字自动增加:
# cat nohuptest.sh
#!/bin/bash
count=0
while [[ $count -lt 10000 ]]
do
echo $count
sleep 1
((count++))
done
首先在前台执行一下,看看是什么效果:
# sh nohuptest.sh
0
1
2
3
4
5
^C
在 linux 系统中,^C(Ctrl + C)发出的是 SIGINT 信号,可以终止进程,更多关于信号的内容,请看linux 命令:kill 详解_yspg_217的博客-CSDN博客
在接收到 SIGINT 信号后,前台执行的进程立刻就终止了。
下面用 nohup 试一下:
# nohup sh nohuptest.sh
nohup: ignoring input and appending output to ‘nohup.out’
^C
# cat nohup.out
0
1
2
3
4
5
# ps -ef | grep nohup
#
如果使用 nohup 接启动命令,虽然输出是从终端转到了 nohup.out 中,但是前台还是被占用,无法执行其他操作。但是在操作了 ^C 后,虽然可以进行其他操作,进程也停止了。
# nohup sh nohuptest.sh &
[1] 9153
# nohup: ignoring input and appending output to ‘nohup.out’
# cat nohup.out
0
# cat nohup.out
0
1
# cat nohup.out
0
1
2
...
# ps -ef | grep nohup
root 9153 6178 0 14:38 pts/0 00:00:00 sh nohuptest.sh
使用 & 后,输出一个进程ID,进程在后台执行,前台不受影响。查看 nohup.out 文件,发现数字在逐渐增加。
# nohup sh nohuptest.sh > /dev/null &
[1] 10334
# nohup: ignoring input and redirecting stderr to stdout
# cat nohup.out
#
可以把输出重定向到 /dev/null,/dev/null 是一个黑洞,重定向到它的数据都会被扔掉。查看 nohup.out,发现是空文件。