在终端运行程序,为何终端关闭时,程序也被关闭?

sh/bash/dash/ksh/zsh等Shell脚本
回复
esolve
帖子: 210
注册时间: 2010-05-08 4:52

在终端运行程序,为何终端关闭时,程序也被关闭?

#1

帖子 esolve » 2017-01-16 7:03

程序运行是终端进程的子进程吧
关闭父进程
为何子进程也被关闭?
这啥原理?
还是说其实关闭的是进程组?
头像
lilydjwg
论坛版主
帖子: 4248
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 在终端运行程序,为何终端关闭时,程序也被关闭?

#2

帖子 lilydjwg » 2017-01-16 11:13

终端关闭时,内核会给 session leader 及其组发 SIGHUP 和 SIGCONT,也会给前台进程组发,然后 bash 收到信号之后会给它所管理的所有进程发送 SIGHUP 信号(这里会包含后台进程组)。一般进程收到 SIGHUP 就会退出。你用 nohup 的话进程就会忽略 SIGHUP 信号。你用 disown(bash / zsh 内建命令)的话,shell 就不管进程了,也就收不到 SIGHUP 了。

当然进程也可能因为别的原因退出,比如往终端输出东西的时候发现失败了,进程也有可能退出。
头像
eagle5678
帖子: 1865
注册时间: 2006-07-08 14:07

Re: 在终端运行程序,为何终端关闭时,程序也被关闭?

#3

帖子 eagle5678 » 2017-03-12 10:13

在后面加个 &
回复