Linux nohup、&、2>&1

一、nohup命令

1.1 nohup命令

nohup命令用于不挂断地运行命令(关闭当前session不会中断改程序,只能通过kill等命令删除)。
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。

nohup command > myout.file 2>&1 &

1.2 &

&用于后台执行程序,但是关闭当前session程序也会结束

二、2>&1 &详解

bash中:

  • 0 代表STDIN_FILENO 标准输入(一般是键盘)
  • 1 代表STDOUT_FILENO 标准输出(一般是显示屏,准确的说是用户终端控制台)
  • 2 三代表STDERR_FILENO (标准错误(出错信息输出)

文件指向:

  • 直接把内容生成到指定文件,会覆盖原来文件中的内容[ls > test.txt]
  • >> 尾部追加,不会覆盖原有内容 [ls >> test.txt]
  • < 将指定文件的内容作为前面命令的参数[cat < text.sh]

2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。

三、/dev/null 2>&1

可以把/dev/null 可以看作”黑洞”. 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
/dev/null 2>&1则表示吧标准输出和错误输出都放到这个“黑洞”,表示什么也不输出。

四、切分nohup.out

保证新的输出日志会不停的继续输出到nohup.out,该命令会瞬间清空nohup.out文件,后续会继续写该文件,将日志定向到/dev/null中

cat /dev/null > nohup.out