Linux 注销时bash如何处理作业?
据我从书籍和bash手册中了解到的是。当用户从bash注销时,如果用户未使用nohup或disown,则用户启动的所有后台作业将自动终止。但今天我测试了它:Linux 注销时bash如何处理作业?,linux,bash,nohup,Linux,Bash,Nohup,据我从书籍和bash手册中了解到的是。当用户从bash注销时,如果用户未使用nohup或disown,则用户启动的所有后台作业将自动终止。但今天我测试了它: 登录到我的gnome桌面并访问gnome终端 终端中有两个选项卡,在其中一个选项卡中,我创建了一个名为test的新用户,并作为test登录 su - test 开始写剧本 cat test.sh #!/bin/bash sleep 60 printf "hello world!!" exit 0 ./test.sh &
su - test
cat test.sh
#!/bin/bash
sleep 60
printf "hello world!!"
exit 0
./test.sh &
这是怎么发生的 只有交互式shell在关闭作业时才会杀死作业。其他shell(例如使用
su-username
)不会这样做。交互式shell只杀死直接子进程。是否在退出时终止运行的后台作业取决于shell。Bash通常不这样做,但可以配置为用于登录shell(shopt-shuponexit
)。在任何情况下,在控制进程(如登录shell)终止后都不可能访问tty
通常会导致SIGHUP
的情况包括:
- 当tty关闭时,前景中的任何东西
- shell终止时包含已停止进程的任何后台作业(
和SIGCONT
)。shell通常会在发生这种情况之前向您发出警告SIGHUP
- 打开:当shell退出时,后台作业将通过SIGHUP终止
$ shopt -s huponexit $ shopt huponexit huponexit on
- 关闭:shell退出时,后台作业不会以SIGHUP终止
$ shopt -u huponexit $ shopt huponexit huponexit off
su-username
会给你一个交互式shell。你是说,如果没有设置huponexit选项,那么bash不会杀死用户的后台作业?@Unni–如果设置了huponexit
,当交互式登录shell退出时,bash会向所有作业发送SIGHUP(使用exit或Ctrl+d)。我注意到这个问题还没有一个公认的答案,还有一个类似的新问题,读起来可能很有趣: