为什么 nohup 命令似乎不起作用?

为什么 nohup 命令似乎不起作用?

请让我知道任何显示的例子nohup甚至在之后还在为一个程序工作logout。我尝试在没有nohup命令的情况下使用它在后台运行脚本,即使在logout.

例子:

ping google.com > ping_result &

然后我注销并再次登录,我发现文件的内容正在增加。这意味着 ping 仍在运行。然而,不应该。

答案1

在终端中运行此命令,

/bin/sleep 1000 &

在不同的终端中,检查进程是否正在运行:

pgrep -fa sleep (流程如图所示)

现在关闭第一个终端,或注销。再检查一遍:

pgrep -fa sleep
(没有显示)


nohup重复添加到第一个命令的 步骤:

nohup /bin/sleep 1000 &

您将看到第二个检查显示该进程仍在运行。

答案2

嗯,这是一个例子。输入:

nohup find -size +100k > log.txt

并注销。然后再次登录并查看log.txt文件。

更多信息:Linux 和 Unix nohup 命令

答案3

nohup 不会“杀死”(防止信号挂起,又名 SIGHUP amd 查看 man 7 信号)在没有终端时尝试写入终端的进程。

当进程不写入终端时,它不需要 nohup - 它会一直存活到终止或完成。然而,许多进程在执行期间尝试写入终端,如果没有终端(例如由于注销),它们会抛出“挂起”信号并死亡。 nohup 可以防止这种情况发生,但是您可以通过将所有输出重定向到文件并将其置于后台(命令 &> 文件 &)来手动防止这种情况发生。
nohup 只是为您自动执行此过程。

nohup 还可以防止终端输入因同样原因丢失时终止,但这种用法不太常见(nohup 将 /dev/null 重定向到输入,而不是终端/标准输入)

答案4

我想出了远程登录的解决方案:

如果使用 nohup 启动进程的终端并且该终端已被终止,则该进程也将继续运行。但是,如果您只是使用exitCtrl+注销D,则不会,但如果您已经退出图形登录,则注销也将起作用。

相关内容