简单来说,nohup
表示当前用户和系统的会话下的进程忽略响应HUP消息,也就是不挂断地运行命令。
下面结合一个具体命令进行分析:
nohup command>/dev/null 2>&1 &
首先对上述命令的几个关键字进行解释:
/dev/null
表示空设备文件&
符号是把该命令以后台的job的形式运行。0
表示stdin标准输入1
表示stdout标准输出2
表示stderr标准错误输出
- 其中
/dev/null
表示一个空设备,而command>/dev/null
等价于command 1>/dev/null
(标准输入1
可以省略),表示把command
的执行结果重定向到空设备中,换句话说就是不显示任何信息 - 而
2>&1
表示将stderr标准错误(2
)重定向到 stdin标准输入(1
)上 ,(符号&
怎么理解都好,主要作用是区别2>&1
和2>1
,后者表示将标准错误输出输出到名为“1”的文件中) - 结合上述两个操作,最后将所有输出都重定向到了空设备文件中
再来一个示例:
nohup python -u main.py 2>&1 >log &
有了上边的基础,这里就好理解了
这里表示 将 main.py 文件运行时输出的内容(标准输出和错误输出)输出到 名为 “log” 的文件中,
这里和上边有两点不同:
- 多了
-u
参数,-u
是 python 编译器的参数,python编译器默认情况下将标准输出默认需要缓存后再输出到屏幕,而标准错误则直接打印到屏幕。使用 -u 参数后,python编译器会将标准输出和标准错误都直接打印到屏幕上。 - 上个示例中的
/dev/null
换成了log
,表示输出到名为 “log” 的 文件中
linux 中 nohup 和 & 关键字的区别请看这篇文章 ->#深入解析# linux 中 & 和 nohup 命令的区别