Linux Nohup命令

时间:2020-03-05 15:28:36  来源:igfitidea点击:

“ nohup”命令执行另一个作为其参数指定的程序,并忽略所有“ SIGHUP”(挂断)信号。
“ SIGHUP”是在其控制终端关闭时发送到进程的信号。

通常,当我们通过SSH运行程序时,如果连接断开或者注销,则会话将终止,并且从终端执行的所有进程都将停止。
这是“ nohup”命令派上用场的地方。
它忽略所有挂断信号,该过程将继续运行。

如何使用nohup命令

'nohup'命令的语法如下:

nohup COMMAND [ARGS]

该命令除了标准的'--help'和'--version'之外,不接受其他任何选项。

让我们看一下以下示例:

nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'

'nohup'在前台运行'mycommand'命令,并将命令输出重定向到'nohup.out'文件。
该文件在当前工作目录中创建。

如果运行该命令的用户没有对工作目录的写权限,那么将在用户的主目录中创建该文件。

如果注销或者关闭终端,则该过程不会终止。

在后台运行命令

在前台使用“ nohup”不是很有用,因为在命令完成之前,我们将无法与shell进行交互。

要在后台运行命令,请在命令末尾添加“&”符号:

nohup mycommand &

输出包括shell作业ID(用括号括起来)和进程ID:

[1] 25177

我们可以使用作业ID使用“ fg”命令将命令置于前台。

如果出于某种原因要终止该进程,请使用“ kill”命令,后跟进程ID:

kill -9 25132

将输出重定向到文件

默认情况下,“ nohup”将命令输出重定向到“ nohup.out”文件。
如果要将输出重定向到其他文件,请使用标准的Shell重定向。

例如,要将标准输出和标准错误重定向到“ mycommand.out”,可以使用:

nohup mycommand > mycommand.out 2>&1 &

要将标准输出和标准错误重定向到其他文件:

nohup mycommand > mycommand.out 2> mycommand.err &

备选方案

关闭终端或者断开连接时,可以使用多种替代程序来避免命令终止。

Screen

Screen或者GNU Screen是一个终端多路复用器程序,它使我们可以启动屏幕会话并在该会话内打开任意数量的窗口(虚拟终端)。

当屏幕窗口不可见时,即使我们已断开连接,在Screen中运行的进程也将继续运行。

Tmux

Tmux是GNU屏幕的现代替代方案。

使用Tmux,我们还可以创建一个会话并在该会话中打开多个窗口。
Tmux会话是持久性的,这意味着即使我们关闭终端,在Tmux中运行的程序仍将继续运行。

disown

“ disown”是内置的Shell,可从Shell的作业控件中删除Shell作业。
与'nohup'不同,我们也可以在运行的进程上使用'disown'。