nohup

2021-09-22  本文已影响0人  jinjin1009

nohup 是 no hang up 的缩写,不挂断的意思

下面会按照nohup command > nohup.out 2>&1 & 这个命令进行拆分讲解

一、nohup command
不挂起的执行 command 程序

二、最后的 & 表示后台运行

三、>nohup.out 2>&1
操作系统中三个常用的流:
0 表示键盘输入流stdin
1 表示屏幕输出即为标准输出stdout
2 表示错误输出stderr

1、标准输出和标准错误都打印到当前目录下的nohup.out文件里
一般当我们用 > nohup.out 实际上是 1 > nohup.out 的省略用法;
< nohup.out,实际上是0 < nohup.out
补充:> nohup.out每次会覆盖文件内容,使用>>nohup.out 进行追加,则nohup.out不会被覆盖

有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中,就有了“2>1”这样的思路,如果按照上面的写法,系统会默认将错误的信息STDERR 2重定向到一个名字为1的文件中,而非所想的STDOUT中。因此需要加&进行区分,就有了 2>&1 这样的用法
注:其意思就是把标准错误 2 重定向到标准输出 1 中,而标准输出又导入到文件 nohup.out里面,所以结果是标准错误和标准输出都导入文件nohup.out里面了

2、如果直接执行nohup command 没有后面的一串,那么将在当前目录自动创建 nohup.out文件,并shell中提示 appending output to nohup.out,输出都将附加到这个文件里

3、如果没有当前目录创建文件的权限,那么输出重定向到根目录下的 /nohup.out 文件中

4、如果没有文件能创建或打开用于追加,那么 command 参数指定的命令不可调用(执行失败)

问题1:为何 2>&1 要写在 >nohup.out 后面?

command > nohup.out 2>&1

首先是command > nohup.out将标准输出重定向到nohup.out中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到nohup.out中,最终结果就是标准输出和错误都被重定向到nohup.out中。

command 2>&1 >nohup.out

2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>nohup.out 后输出才被重定向到nohup.out,但标准错误仍然保持在终端。

上一篇下一篇

猜你喜欢

热点阅读