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
    • 最新
    • 标签
主页 / unix / 问题 / 484276
Accepted
Tim
Tim
Asked: 2018-11-27 11:48:50 +0800 CST2018-11-27 11:48:50 +0800 CST 2018-11-27 11:48:50 +0800 CST

`disown -h` 和 `nohup` 有效地工作相同吗?

  • 772

disown

  • 导致 shell 在 shell 终止时不发送 SIGHUP 到其不承认的作业,并且

  • 从 shell 的作业控制中删除不承认的作业。

第一个是第二个的结果吗?换句话说,如果从 shell 启动的进程以任何方式从 shell 的作业控制中删除,shell 是否不会在 shell 终止时向进程发送 SIGHUP?

disown -h 仍然将进程置于 shell 的作业控制之下。这是否意味着disown -h让进程仍然接收到从shell发送的SIGHUP,但是将进程的SIGHUP动作设置为“忽略”?这听起来类似于nohup。

$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+  Running                 sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+  Stopped                 sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit

$ ps aux | grep sleep
t        26103  0.0  0.0  14584   824 ?        S    15:19   0:00 sleep 123

如果我们忽略他们在使用终端方面的差异,是否可以有效地工作disown -h?nohup

谢谢。

bash nohup
  • 2 2 个回答
  • 6893 Views

2 个回答

  • Voted
  1. Best Answer
    Kusalananda
    2018-11-27T12:05:31+08:002018-11-27T12:05:31+08:00

    nohup和disown -h不完全相同的东西。

    使用disown,从当前交互式 shell 中的作业列表中删除一个进程。jobs在启动后台进程并运行后运行不会disown将该进程显示为 shell 中的作业。退出的作业在退出时不会收到HUP来自 shell 的 a(但请参阅末尾的注释)。

    使用disown -h,该作业不会从作业列表中删除,但如果它退出,shell 不会向HUP它发送信号(但请参阅末尾的注释)。

    该nohup实用程序忽略该HUP信号并启动给定的实用程序。该实用程序继承了信号掩码,nohup因此也将忽略该HUP信号。当 shell 终止时,该进程仍然是nohup(并nohup重新成为init)的子进程。

    不同之处在于,无论谁发送信号,进程都以nohup忽略开始。HUP被拒绝的进程只是没有由shell发送HUP信号,但仍可能从 eg 发送信号并且不会忽略这一点。kill -s HUP <pid>

    请注意,HUP仅在以下情况下才会发送到 shell 的作业

    • shell 是登录 shell 并且huponexit设置了 shell 选项,或者
    • 外壳本身接收到一个HUP信号。

    手册中的相关内容bash(我的重点):

    信号

    [...]

    默认情况下,shell在收到SIGHUP. 在退出之前,交互式 shell 将重新发送SIGHUP给所有正在运行或停止的作业。发送已停止的作业SIGCONT以确保它们收到 SIGHUP. 为防止 shell 将信号发送到特定作业,应使用disown内置函数(见下文)将其从作业表中删除,或 使用SHELL BUILTIN COMMANDS标记为不接收。SIGHUPdisown -h

    如果huponexitshell 选项已设置为shopt,则在交互式登录 shell 退出时向所有作业bash发送 a 。SIGHUP

    disown [-ar] [-h] [jobspec ... | pid ... ]

    如果没有选项,jobspec请从活动作业表中删除每个选项。[...]如果-h给出了选项,每个jobspec都不会从表中删除,但会被标记,以便SIGHUP如果 shell 收到一个SIGHUP. [...]

    有关的:

    • nohup、disown 和 & 之间的区别
    • 23
  2. Michael Prokopec
    2018-11-27T12:17:07+08:002018-11-27T12:17:07+08:00

    它们不一样:

    • disown 从活动作业表中删除作业。然后继续当前的工作。使用 -h不会发送 SIGHUP 进程。相反,当它收到 SIGHUP 时,它会随着包含它的 shell 而死。

    • nohup 忽略 HUP。然后,任何通过进程关闭传递给终端的东西都会转到文件nohup.out中。

      nohup 由 POSIX 定义,而 disown 不是。

    • 4

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

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

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve