nohup后台运行以及重定向标准输出和标准异常

nohup&是后台运行并把stdout输出到文件nohup.out中。其实&是后台运行的命令。

一般都是在linux下nohup格式:
nohup command_line
或者
nohup command_line &

不带&的命令是在前台运行,按下ctr+c时,任务中断。带&的命令时后台运行,即使terminal关闭,或者电脑死机程序依然运行(前提是程序已递交到服务器上)。

以上两个命令把标准输出(STDOUT)和标准错误(STDERR)结果输出到nohup.txt。但是当输出很大的时候,nohup.txt文件会非常大,或者多个后台命令的时候大家都会输出到nohup.txt文件,不利于查找结果和调试程序。
所以能够重定向输出会非常方便。下面要介绍标准输出,标准输入 和标准错误了。

其实我门一直都在用,只是没有注意到,比如

./command.sh > output

这其中的>就是标准输出符号,其实是 1>output 的缩写

./command.sh 2> output

这里的2>就是将标准错误输出到output文件里。而0<则是标准输入了。

如何重定向后台命令?

模板命令如下:

nohup ./command.sh > output 2>&1 &

nohup的作用

nohup有两个作用:

  1. 忽略所有发送给子命令的挂断(SIGHUP)信号
    所有发给command.sh的SIGHUP信号都被忽略,command.sh就不会收到SIGHUP信号。什么是SIGHUP信号呢?
    简单的理解可以是终端结束时,操作系统会发送SIGHUP信号到后台进程。

  2. 重定向子命令的标准输出(stdout)和标准错误(stderr)
    command.sh的标准输出和标准错误被重定向到nohup.out文件;如果没有使用nohup方式,则command.sh的标准输出和标准错误是复用父进程的标准输出和标准错误。

后台运行标志&

后台运行,即使terminal关闭,或者电脑死机程序依然运行(前提是程序已递交到服务器上)

2>&1

这个命令的意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。

至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。

这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这就是为什么有人会写成:
nohup ./command.sh >output 2>output出错的原因了

通常后台运行重定向可以写成:

nohup sh command.sh > logs/command.log 2>&1 &

标准错误和标准输出都会导入logs文件夹下的command.log日志文件。

/dev/null文件的作用

这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值