AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 115999
Accepted
Massimo
Massimo
Asked: 2010-02-24 13:04:14 +0800 CST2010-02-24 13:04:14 +0800 CST 2010-02-24 13:04:14 +0800 CST

如果我启动后台进程然后注销,它会继续运行吗?

  • 772

在与同事长时间讨论后问这个问题,我真的很想在这里澄清一下。

我启动了一个后台进程,或者通过将“ &”附加到命令行,或者通过CTRL-Z使用“”停止它并在后台恢复它bg。然后我退出。

怎么了?

我们很确定它应该被 SIGHUP 杀死,但这并没有发生;再次登录后,该进程正在愉快地运行,并pstree显示它已被init.

这是预期的行为吗?

但是,如果是,那么该nohup命令的目的是什么?看起来这个过程无论如何都不会被杀死,不管有没有它......


编辑 1

更多细节:

  • 该命令是从 SSH 会话启动的,而不是从物理控制台启动的。
  • 该命令在没有 nohup和/或的情况下启动&;然后它被暂停CTRL-Z并在后台恢复bg。
  • ssh 会话没有中断。有一个实际的注销(“ exit”命令)。
  • 该过程是scp文件复制操作。
  • 再次登录后,pstree显示该进程正在运行并且是init.

编辑 2

为了更清楚地说明问题:将进程置于后台(使用&or bg)使其忽略SIGHUP,就像nohup命令一样?


编辑 3

我尝试手动发送一个SIGHUPto scp: 它退出了,所以它绝对不会忽略这个信号。

然后我再次尝试启动它,将其置于后台并注销:它被“采用”init并继续运行,我在重新登录时发现它在那里。

我现在很困惑。SIGHUP注销后似乎根本没有发送。

linux bash process background
  • 7 7 个回答
  • 53488 Views

7 个回答

  • Voted
  1. Best Answer
    Massimo
    2010-02-27T06:01:03+08:002010-02-27T06:01:03+08:00

    找到答案。

    对于 BASH,这取决于huponexitshell 选项,可以使用内置shopt命令查看和/或设置。

    看起来这个选项默认是关闭的,至少在基于 RedHat 的系统上是这样。

    有关BASH 手册页的更多信息:

    shell 在收到 SIGHUP 后默认退出。在退出之前,交互式 shell 会将 SIGHUP 重新发送到所有正在运行或停止的作业。停止的作业被发送 SIGCONT 以确保它们收到 SIGHUP。为防止 shell 将信号发送到特定作业,应使用 disown 内置命令将其从作业表中删除(请参阅下面的 SHELL BUILTIN 命令)或使用 disown -h 将其标记为不接收 SIGHUP。

    如果已使用 shopt 设置了 huponexit shell 选项,则当交互式登录 shell 退出时,bash 会向所有作业发送 SIGHUP。

    • 27
  2. Kim
    2010-02-25T00:29:24+08:002010-02-25T00:29:24+08:00

    我同意 Warner 的观点,只是想补充一点,您可以使用内置的“disown”命令阻止 shell 发送 SIGHUP。bash 手册页包含一个很好的描述。

    • 7
  3. Jim
    2010-02-24T14:35:57+08:002010-02-24T14:35:57+08:00

    您可以使用命令nohup启动命令并将输出重定向到 nohup 输出文件。从 nohup 手册页:

    nohup - run a command immune to hangups, with output to a non-tty
    

    另一种选择是使用屏幕命令。使用 screen 的好处是您可以稍后重新连接到该进程。

    • 4
  4. Warner
    2010-02-24T13:37:34+08:002010-02-24T13:37:34+08:00

    当你将一个进程分叉到后台时,它仍然是 shell 中执行它的子进程。

    在 shell 下运行的所有子进程在退出时都会发送一个 SIGHUP。性能会根据具体情况略有不同,详细信息请参见 bash 的联机帮助页。其他贝壳可能有类似的描述。

    Apache 和其他守护进程通常在 SIGHUP 上重新加载配置。用户空间实用程序经常死掉。与信号相关的应用程序性能对于应用程序来说可能是独一无二的。

    • 2
  5. Warner
    2010-02-24T13:12:12+08:002010-02-24T13:12:12+08:00

    过程是什么?之前发布的1中描述的性能是准确的。

    某些脚本函数和进程可以捕获信号。while 循环可以像疯了一样跑掉。

    看:

    SSH 会话丢失 - 命令是否继续执行?

    下午 4:22 编辑 1

    从 bash 手册页:

    The shell exits by default upon receipt of a SIGHUP.   Before  exiting,
    an  interactive  shell  resends  the  SIGHUP  to  all  jobs, running or
    topped.
    

    初步研究1表明 OpenSSH 可能会忽略 SIGHUP,可能会忽略更多信号。

    • 0
  6. x-yuri
    2021-11-16T17:52:17+08:002021-11-16T17:52:17+08:00

    如果您注销 (Ctrl-D或exit),它将继续运行。但是如果你关闭终端窗口,后台进程就会收到SIGHUP。SIGHUP如果您失去与服务器的连接,他们还将收到。本地运行的 shell 也是如此(除了你不能失去与本地 shell 的连接)。

    • 0
  7. warren
    2010-02-24T13:33:05+08:002010-02-24T13:33:05+08:00

    如果您没有通过类似的工具启动命令screen,那么当会话结束时,与该会话关联的所有作业/任务也会如此。

    • -1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve