nohup 和 & 命令详解

简介

以常见的nohup例子来进行介绍.

nohup sh example.sh > example.log 2>&1 &

这条命令起到了两个效果.
1. 命令在后台运行.
2. 命令在后台运行的同时, 即使退出了终端会话, 也能够继续运行.

这两个效果分别依赖两个概念, 一个是&操作符, 另一个是nohup命令.

原理

&

&符放到命令后时,它会将命令和bash shell分离开来,将命令作为系统中的一个独立的后台进程运行。

通过&符放入后台运行的进程, 会和终端会话(pts /0) 进行绑定, 如果终端会话退出, 则后台进程也会随之退出.

nohup

nohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号。 这会在退出终端会话时阻止进程退出.

由于nohup命令会解除终端与进程的关联,进程也就不再同STDOUTSTDERR联系在一起。
为了保存该命令产生的输出,nohup命令会自动将STDOUTSTDERR的消息重定向到一个名为nohup.out的文件中。

在示例中, 我们将STDERR通过2>&1重定向到STDOUT, 而将STDOUT重定向到example.log文件中.

The name nohup stands for “no hangup.” The hangup (HUP) signal, which is normally sent to a process to inform it that the user has logged off (or “hung up”), is intercepted by nohup, allowing the process to continue running.

nohup表示’no hangup’. hangup(HUP)信号常常被发送给某个进程, 用来告知此进程用户已经登出(或者’挂起’). 而这个信号会被nohup拦截, 从而保证进程的继续运行.

区别和联系

&指在后台运行, nohup指不挂断的运行.

nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开ssh连接都不会影响程序的运行.

References

Linux命令行与shell脚本编程大全 – Chapter 16
Section 2 : 以后台模式运行脚本
Section 3 : 在非控制台下运行脚本

Linux nohup command

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据