Linux Nohup 命令

评论 0 浏览 0 2019-06-13

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 是一个终端多路复用器程序,允许您启动屏幕会话并在该会话内打开任意数量的窗口(虚拟终端)。即使您断开连接,在屏幕中运行的进程在其窗口不可见时也将继续运行。

Tmux

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

Disown

disown 是一个 shell 内置命令,用于从 shell 的作业控制中删除 shell 作业。与nohup不同,您也可以在正在运行的进程上使用disown

结论

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

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

最后更新2023-09-16
0 个评论
标签