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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值