您的位置:首页 > 运维架构 > Linux

[linux]linux命令的后台不挂断运行

2017-10-09 17:44 274 查看
[转自: http://blog.csdn.net/zjc/article/details/51484114]

command & 这是什么?

命令后面加上&符号,是干啥的?  是为了让命令转入后台运行,我们可以敲其他命令干别的事。

但是有个困扰,当command命令执行出output结果时候,还是会弹出来干扰我们。用这个办法command > output & 就能解决这个问题,它实现了把命令的输出结果重定向输出到output文件中。

但是还有个困扰,当command命令产生了错误输出时候,还是会弹出来干扰我们。用这个办法command > output  2 > error & 就能解决这个问题,它可以把错误输出重定向到error文件中。

command > output & 等同于 command 1 > output &, 把命令的输出重定向到output文件。

0:  stdin  标准输入

1:  stdout 标准输出

2:  stderr 标准错误

有时候我们并不关心output和错误输出的结果,又不想让它们干扰我们,好了那就用这样的办法:

command > /dev/null  2 > /dev/null , 

command > /dev/null 2 > error ,

command > output  2 > /dev/null,其中/dev/null表示空设备,把内容重定向到空设备了,当然就等于该内容没有重定向,说明它不是我们关注的。

如果想把stdout和stderr都重定向到一个文件怎么办呢?  

那就用到了2和1之间的重定向。2 > &1 ,用法:  command 1 > output 2 > &1 &, 这里2>&1就是把标准错误重定向到标准输出了,标准输出最后重定向到output,那么command命令的stdout和stderr都统一输出到output 文件了。

既然stdout和stderr都重定向到output,那这样写不就好了: command > output 2 > output &。 其实这样是不行的,stdout和stderr的文件名一致的话会冲突。因此想要忽略stdout,stderr就用commad > /dev/null 2 > &1 & 

但是使用command > output 2>&1 & 有个问题,那就是每次运行都会覆盖原来的内容,我们想要追加效果就用>>好了:

command >> output 2 >&1 &

另外,上面的命令在shell打开的情况下是没有问题的,如果shell关掉了进程就会结束(例如:关闭窗口,退出ssh登录),我们希望窗口关掉了但是命令还不停歇的执行,就需要加上nohup:    nohup command >> output 2>&1 & 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: