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
并不是很有用,因为在命令完成之前您将无法与 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
允许您防止命令在您注销或退出终端时被终止。
如果您有任何问题或反馈,请随时发表评论。