gpt4 book ai didi

linux - 注销时 bash 如何处理作业?

转载 作者:IT王子 更新时间:2023-10-29 00:22:07 24 4
gpt4 key购买 nike

据我从书籍和 bash 手册中了解到的那样。当用户从 bash 注销时,如果他没有使用 nohup 或 disown,则用户启动的所有后台作业将自动终止。但是今天我测试了它:

  1. 登录到我的 gnome 桌面并访问 gnome 终端。
  2. 终端中有两个选项卡,在一个选项卡中我创建了一个名为 test 的新用户并以 test 身份登录

    su - test
  3. 启动了一个脚本。

    cat test.sh
    #!/bin/bash
    sleep 60
    printf "hello world!!"
    exit 0


    ./test.sh &
  4. 之后我退出测试并关闭了标签

  5. 在下一个选项卡中,我以 root 身份执行 ps aux,发现该作业仍在运行。

这是怎么回事?

最佳答案

运行的后台作业是否在退出时终止取决于 shell。 Bash 通常不会这样做,但可以配置为用于登录 shell (shopt -s huponexit)。在任何情况下,控制进程(例如登录 shell)终止后都无法访问 tty。

总是会导致 SIGHUP 的情况包括:

  • 当 tty 关闭时在前台的任何东西。
  • 任何后台作业,包括在其 shell 终止时停止的进程(SIGCONTSIGHUP)。 Shell 通常会在让这种情况发生之前警告您。

huponexit 总结:

  • 开启:当 shell 退出时,后台作业将通过 SIGHUP 终止

    $ shopt -s huponexit
    $ shopt huponexit
    huponexit on
  • Off:当 shell 退出时,后台作业不会被 SIGHUP 终止。

    $ shopt -u huponexit
    $ shopt huponexit
    huponexit off

关于linux - 注销时 bash 如何处理作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com