Linux中的session的概念

1. session是一系列进程的集合。这些进程的sid是相同的。注意,它就是一个集合!仅仅是一个集合!不要赋予其过多的意义,因为那样是错误的。

2. session不是进程,它是一组进程的集合 。session leader是进程,而且其pid等于sid。

3. session也不等价于一个shell会话。任何一个进程,当它成功setsid后,一个新的session就被建立了,该进程就是session leader. 典型的例子就是Linux系统上的daemon。

4. 一个session中的进程是树状结构。一个session中的进程,一定是session leader或者其子孙进程。比如,如果A进程是一个session的session leader,那么同在这个session中的B进程,一定是A进程的子进程或者子进程的子进程(以此类推)。原因是,setsid这个调用是不接受参数的,即session号由系统分配。比如一个不是A子孙进程的进程C想要把自己的session号设置成和A一样,这是不可能的,因为A所处的session还没有消亡,系统不会把这个号分配给C。

5. session何时消亡?所有session中的进程都结束时消亡。即,所有有这个sid号的进程执行结束。这种执行结束分为被动和主动两种。session leader退出(或者结束)时,session中的进车会收到SIGHUP信号,默认结束掉进程。如果该进程对SIGHUP做了处理,不结束,那么会受到SIGCONT信号,让进程正常执行完毕。网上有些文章把bash敲exit退出和直接被结束作为session消亡时的两种情况,这种就是典型的完全没搞清概念,从现象去套模糊的概念而总结出来的“规律”,害人害己。bash敲exit退出时,bash还没退出,它作为一个session leader没有退出!敲exit时,bash的行为,完全由bash代码决定!bash被强制退出(比如被kill掉),那么它作为一个session leader就结束了,系统才会有以上的SIGHUP/SIGCONT的一些行为。


以上就是Linux中session的一个基本概念。尤其注意的是不要把session和bash,shell,X session这个概念混淆。



转载于:https://my.oschina.net/u/158589/blog/360862

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值