16、终端 I/O 深入解析:会话、进程组与属性设置

终端 I/O 深入解析:会话、进程组与属性设置

1. 会话与进程组基础概念

当用户登录时,会创建一个新的会话。这个会话包含一个新的进程组,进程组里有一个运行登录 shell 的进程。该进程既是进程组的领导者,其进程 ID 也是进程组 ID,同时它还是会话领导者,进程 ID 也就是会话 ID。用户登录所用的终端成为该会话的控制终端,会话领导者也是控制进程。

如果 shell 启用了作业控制,当命令或命令管道在后台运行时,会形成新的进程组。例如 $ du –a | grep tmp >out.tmp& 会创建一个包含两个进程的新进程组。此时,前台和后台的进程组都在同一个会话中,且共享同一个控制终端。

作业控制的关键在于,从控制终端产生的特定信号(如中断 SIGINT、退出 SIGQUIT 或暂停 SIGTSTP)只会发送到前台进程组,不会影响后台进程组。用户可以通过 shell 命令在前台和后台之间移动进程组。若未启用作业控制,新进程会和 shell 在同一个进程组中运行,控制终端产生的信号会发送给该进程组的所有进程。

当控制终端挂断或断开连接时,会向控制进程发送 SIGHUP 信号,默认会终止该进程。一旦控制进程终止,前台(或唯一)进程组的每个进程都会收到 SIGHUP 信号,默认也会导致它们终止。

如果后台进程组中的进程尝试访问控制终端,基本规则是:后台进程读取控制终端会收到 SIGTTIN 信号,写入则会收到 SIGTTOU 信号。这些信号默认会使进程暂停,但也有一些例外情况:
|情况|结果|
|----|----|
|后台进程尝试读取且忽略或阻塞 SIGTTIN

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值