Bash Nohup 与 & 的区别
这篇简短的文章介绍了通过 Bash 在后台运行 Linux 进程的 nohup 命令和 &
控制运算符。 此外,我们将进一步研究 nohup 和 &
之间的主要区别。
在后台运行 Linux 进程
Linux 提供了两种在后台运行进程或命令的方法。
-
仅使用与号 (
&
) 控制运算符。 -
将 nohup 命令与
&
结合使用。
符号 (&) 控制运算符
我们可以使用 & 控制运算符在后台异步运行任何命令。
考虑以下命令。
sleep 10
sleep
命令添加特定时间的延迟。 当我们运行 sleep 10 命令时,它会暂停 Bash 终端 10 秒,我们不能在终端上运行任何其他命令。
现在,考虑以下命令。
sleep 10 &
上面命令显示进程id(PID),sleep 10在后台异步执行。 执行控制返回命令终端,不等待睡眠结束。
现在,我们可以在同一终端上与后台睡眠命令并发运行任何其他命令。
我们可以使用以下命令将后台进程移动到前台。
fg
nohup 命令
nohup
命令运行任何其他命令或进程。 它代表“no hang-up”,它可以防止关联的进程获得 SIGHUP 信号。
如果你想在终端关闭后仍然执行命令,你可以使用 nohup CommandName。
但是,如果我们想在后台运行一个命令,并且执行控制立即返回到终端,我们必须使用下面的命令。
nohup sleep 10 &
上面的命令在后台运行 sleep 10 命令并立即返回控制权,以便我们可以在同一终端上运行任何其他命令。
我们可以使用 pgrep 命令查看后台运行的命令,如下所示:
pgrep -a [Command]
pgrep
命令搜索命令并显示进程 ID (PID) 以及正在执行的命令详细信息。
例如,pgrep -a sleep
会将相关的后台进程显示为:
PID sleep 10
在这里,PID 表示分配给睡眠命令的进程 ID。
控制运算符 & 和 nohup 命令之间的区别
以下是使用 &
和 nohup
在后台运行命令或进程之间的一些区别。
nohup 可以捕获挂断信号(SIGHUP),而 & 则不能。 SIGHUP 信号用于在进程启动的终端关闭时向进程发送信号。
通常,进程或命令使用 & 在后台运行,直到存在从中启动此命令或进程的 shell。 一旦 shell 终止,所有关联的命令或在后台运行的进程 & 也将终止。
当终端退出时,使用 SIGHUP (kill SIGHUP <pid>)
的挂断信号会终止该终端的所有子命令或子进程。 但是,这可以使用 nohup 来防止。
nohup 命令捕获 SIGHUP 信号,不让它到达实际命令。 因此,限制命令在 Bash 终端退出时终止。
&
和 nohup
之间的另一个区别是关于 stdout/stderr 的重定向。
&
运算符不会自动重定向 stdout/stderr,而是将命令的输出直接显示到终端。 但是,nohup 将 stdout/stderr 重定向到位于 $HOME 的文件 nohup.out 中。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。