nohup 命令的作用是什么?

cod*_*nza 19 command-line nohup

我是 Ubuntu 的新手。我学会了一个命令

nohup [command]- 运行<command>免疫挂断信号

我无法理解“对挂断信号免疫”的含义。它在谈论什么类型的信号?并请告诉我如何通过示例使用此命令。

sou*_* c. 35

让我们假设您已经gedit从终端打开了一个 文本编辑器并正在处理它。如果您在关闭之前关闭终端gedit,则 gedit 也会在关闭终端后立即关闭。那么这里发生了什么?在gedit运行作为终端下一个子进程。当您关闭终端时,挂断信号( SIGHUP) 会发送到杀死子进程的进程。

另一方面,如果您希望您的子进程(此处gedit)在关闭父终端后继续运行,您会希望您的进程不受挂断信号的影响。这样关闭终端就不会关闭子进程。nohup正是这项工作。

nohup不会从终端断开命令,它使您的脚本忽略 SIGHUP,并将 stdout/stderr 重定向到文件 nohup.out,以便该命令可以在您注销后继续在后台运行。如果您关闭 shell/终端或注销,您的命令不再是该 shell 的子级。它属于init进程。如果您搜索,pstree您会看到它现在归进程 1 (init) 所有。无法将其带回前台,因为前台不再存在。


Ron*_*ohn 16

除了@sourvac 写的内容之外,这是来自 Back In The Day 的遗产,当时人们通过纯文本哑终端登录,通常是通过(原始的,模拟 110 波特)调制解调器:“挂断”字面意思是“挂断电话” ”。

即使在您注销并挂断电话后,不受挂机信号影响的pid仍将继续运行。这在慢速计算机上非常有用,当工作连续几个小时运行时,你不能只是保持登录状态(其他人需要使用终端,你需要使用电话,线路中的静态可能会“bzzt”连接, 等等)。

  • 不仅仅是回到过去。我在通过 ssh 连接的服务器集群上运行大部分大型作业。如果我不使用 nohup,我需要将笔记本电脑连接到这些机器几天,同时等待作业完成。 (2认同)