退出时bash如何处理作业?

据我所知,这些书和bash手册就是这样。 当用户从bash注销时,如果用户没有使用nohup或disown,用户启动的所有后台作业都将自动终止。 但是今天我testing了一下:

  1. login到我的gnome桌面并访问gnome-terminal。
  2. 在terminal中有两个选项卡,在一个我创build一个新的用户称为testing和login作为testing

    su - test 
  3. 开始了一个脚本。

     cat test.sh #!/bin/bash sleep 60 printf "hello world!!" exit 0 ./test.sh & 
  4. 之后,我退出testing并closures了选项卡

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

这是怎么发生的?

Solutions Collecting From Web of "退出时bash如何处理作业?"

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

始终导致SIGHUP包括:

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

huponexit总结:

 $ shopt -s huponexit; shopt | grep huponexit huponexit on # Background jobs will be terminated with SIGHUP when shell exits $ shopt -u huponexit; shopt | grep huponexit huponexit off # Background jobs will NOT be terminated with SIGHUP when shell exits 

只有交互式shell在关闭它们时才会终止作业。 其他的shell(例如,使用su - username获得的shell)不会这样做。 而交互式shell只会杀死直接的子进程。