Linux Nohup命令

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 前景中的命令不是很有用,因为在命令完成之前您将无法与外壳进行交互。

要在后台运行命令,请附加 & 命令末尾的符号:

nohup mycommand &

输出包括外壳作业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或GNU Screen是一个终端多路复用器程序,它使您可以启动屏幕会话并在该会话内打开任意数量的窗口(虚拟终端)。 当您的窗口不可见时,即使您已断开连接,在Screen中运行的进程也会继续运行。

Tmux#

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

取消#

disown 是内置的Shell,可从Shell的作业控件中删除Shell作业。 不像 nohup, 您可以使用 disown 在运行的进程上。

结论#

nohup 允许您防止注销或退出终端时命令被终止。

如果您有任何疑问或反馈,请随时发表评论。

nohup终端

Sidebar