linux 命令:nohup 详解

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,发现是空文件。

你可能感兴趣的:(linux命令详解,linux,运维,服务器)