linux nohup xxx > /dev/null 2>&1 &

前言

实际上很多时候很容易在服务器环境发现linux nohup xxx > /dev/null 2>&1 &,只不过经常是输出到某个文件而不是/dev/null。实际上很多指令是很好理解的,唯独2>&1很奇特。介绍这些指令的原理。

各个指令

linux nohup xxx > /dev/null 2>&1 &

nohup xxx   >  /dev/null > &1  &
nohup指令 执行的命令 标准输出符 仅写入的虚拟硬件 stderr标准错误 &1的&表示文件描述符,&1的1表示stdout标准输出 &单字符表示后台运行

各个指令逐一解析

1. nohup: no hang up(不挂起),hang是悬挂的意思,表示关闭终端tty等,退出账号,进程仍然保持运行,&也有相同的意思,所以一般配合&一起使用。

2. xxx:表示执行的指令

3. > >>:实际上有2种重定向输出符,>表示覆盖写入文件;>>表示追加写入文件。

/dev/null:/dev表示设备文件,因为Linux一切皆文件,null表示这个文件是无意义文件,笔者最开始觉得这个文件是表示不存在的文件,实际上不是的,这个文件是有定义的

linux nohup xxx > /dev/null 2>&1 &

 4. 2>&1:这个就涉及shell的设计了

在 shell 中,常用的 FD (file descriptor,文件描述符) 有三个

0 :标准输入(stdin)

1 :标准输出(stdout)

2 :标准错误(stderr)

在标准情况下, 这些文件描述符关联设备: 
stdin(0):       keyboard 键盘输入    返回在前端 
stdout(1):     monitor   正确返回值 输出到前端 
stderr(2):     monitor    错误返回值 输出到前端

其中当> >>等输出重定向符需要输出stdout stderr时需要特别标记文件描述符&,否则会被认为是文件,输入不需要,实际上输入也是可以使用&的,比如&>1.log,表示把标准输出和标准错误输出都重定向到文件1.log中

5. &符号:单个&符号表示后台运行,类似nohup,一般配合nohup使用

总结

linux运行程序一般就会使用上面的命令,来达到后台运行,精确输出重定向的能力,不会因为tty 用户的退出而退出,一般直接运行程序,如果没有特殊处理,是会被ctrl+c,或者终端退出,用户退出而结束进程。

上一篇:记录以下今天碰到的UnwrapRef


下一篇:docker容器内使用sudo 报错bash: sudo: command not found