据我从书籍和bash手册中了解到的那样。当用户从bash注销时,如果用户未使用nohup或disown,则用户启动的所有后台作业将自动终止。但今天我测试了它:
终端中有两个选项卡,其中一个我创建了一个名为test的新用户并以测试身份登录
su - test
启动了一个脚本。
cat test.sh
#!/bin/bash
sleep 60
printf "hello world!!"
exit 0
./test.sh &
之后我退出测试并关闭了标签
这是怎么回事?
答案 0 :(得分:12)
退出时是否终止运行后台作业取决于shell。 Bash通常不会这样做,但可以配置为登录shell(shopt -s huponexit
)。在任何情况下,在控制进程(例如登录shell)终止后,都无法访问tty。
始终导致SIGHUP
的情况包括:
SIGCONT
和SIGHUP
)。在发生这种情况之前,贝壳通常会警告你。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
答案 1 :(得分:2)
关闭它们时,只有交互式shell会终止作业。其他shell(例如使用su - username
获得的shell)不会这样做。交互式shell只会杀死直接的子进程。