注销时 bash 如何处理作业?

发布于 2024-10-04 15:52:46 字数 475 浏览 3 评论 0原文

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

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

    su - 测试
    
  3. 身份登录并启动了一个脚本。

    cat test.sh
    #!/bin/bash
    睡眠 60
    printf“你好世界!!”
    出口0
    
    
    ./test.sh &
    
  4. 之后,我退出测试并关闭选项卡

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

这是怎么回事?

As far as I understood from the books and bash manuals is that. When a user logs out from bash all the background jobs that is started by the user will automatically terminate, if he is not using nohup or disown. But today I tested it :

  1. Logged in to my gnome desktop and accessed gnome-terminal.
  2. There are two tabs in the terminal and in one I created a new user called test and logged in as test

    su - test
    
  3. started a script.

    cat test.sh
    #!/bin/bash
    sleep 60
    printf "hello world!!"
    exit 0
    
    
    ./test.sh &
    
  4. After that I logged out of test and closed the tab

  5. In the next tab I exected ps aux as root and found that job is still running.

How this is happening ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧城烟雨 2024-10-11 15:52:46

正在运行的后台作业是否在退出时终止取决于 shell。 Bash 通常不会执行此操作,但可以配置为登录 shell (shopt -s huponexit)。无论如何,在控制进程(例如登录 shell)终止后,就不可能访问 tty。

总是导致 SIGHUP 的情况包括:

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

huponexit 摘要:

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

    $ shopt -s huponexit
    $ 购物 huponexit
    胡波退出
    
  • :当 shell 退出时,后台作业不会通过 SIGHUP 终止.

    $ shopt -u huponexit
    $ 购物 huponexit
    huponexit 关闭
    

Whether running background jobs are terminated on exit depends on the shell. Bash normally does not do this, but can be configured to for login shells (shopt -s huponexit). In any case, access to the tty is impossible after the controlling process (such as a login shell) has terminated.

Situations that do always cause SIGHUP include:

  • Anything in foreground when the tty is closed down.
  • Any background job that includes stopped processes when their shell terminates (SIGCONT and SIGHUP). Shells typically warn you before letting this happen.

huponexit summary:

  • On: Background jobs will be terminated with SIGHUP when shell exits

    $ shopt -s huponexit
    $ shopt huponexit
    huponexit       on
    
  • Off: Background jobs will NOT be terminated with SIGHUP when shell exits.

    $ shopt -u huponexit
    $ shopt huponexit
    huponexit       off
    
红衣飘飘貌似仙 2024-10-11 15:52:46

只有交互式 shell 才会在您关闭作业时将其杀死。其他 shell(例如通过使用 su - username 获得的 shell)不会执行此操作。交互式 shell 只会杀死直接子进程。

Only interactive shells kill jobs when you close them. Other shells (for example those you get by using su - username) don't do that. And interactive shells only kill direct subprocesses.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文