交互式登录会话可以拥有控制终端:它是与会话关联的终端设备,内核用它处理终端生成的信号和作业控制。进程列表中的 TTY 字段有助于识别这种关联。
进程 · 第 2 课
控制终端
学习控制终端如何把会话与交互式输入、信号和 shell 作业控制连接起来。
终端和伪终端设备
TTY 这个名称源自历史上的电传打字机。在现代 Linux 上,终端接口是设备抽象,不一定对应物理设备。
系统虚拟控制台可能使用 tty1 等名称。切换控制台的桌面快捷键因发行版而异,不应想当然。终端模拟器、远程登录或多路复用器通常使用伪终端对,交互端显示为 pts/3 等名称。
使用以下命令显示与当前命令标准输入相连的终端:
$ tty
/dev/pts/3
该结果与更广义的控制终端概念相关,但并不完全相同。进程可以重定向标准输入或输出,同时仍处于拥有控制终端的会话中。
pts/3 这样的名称通常标识什么?
会话、进程组和作业控制
控制终端属于会话,而不只是恰好打开窗口的命令。在该会话中,终端会跟踪前台进程组。Shell 会把前台管道放入该组,使其可以读取输入并接收终端生成的信号。
例如,按下 Ctrl-C 通常会让终端驱动程序向前台进程组发送 SIGINT。尝试从终端读取的后台组可能收到 SIGTTIN。这些规则让 shell 能够协调前台和后台作业。
终端通常会把 Ctrl-C 生成的信号发送给哪些进程?
阅读 `TTY` 列
如果需要稳定视图,应明确请求选定的进程字段:
$ ps -o pid,tty,stat,cmd
pts/3 等终端名称标识为该进程记录的控制终端。问号(?)通常表示进程没有控制终端。
许多服务进程没有控制终端,因为服务管理器会独立于交互式登录会话启动它们。不过,缺少 TTY 本身并不能证明进程是守护进程,后台 shell 作业也仍然可以拥有控制终端。
ps 的 TTY 列中,? 通常表示什么?
终端关闭和挂断
终端连接消失时,内核或终端/会话软件可以向相关进程发送 SIGHUP。进程可能终止、捕获信号、忽略信号,也可能已经被安排为在信号后继续运行。disown 等 shell 功能、nohup 等工具、多路复用器和服务管理器都会影响生命周期行为。
因此,关闭终端并不保证从中启动的每个命令都会退出。需要确认持久性时,应检查进程的会话、信号处理、重定向和监督程序。
为什么“关闭终端始终会终止从中启动的每个进程”这一说法不准确?
管理和监控 Linux 进程实验提供了安全环境,可比较前台作业、后台作业及其 TTY 字段。
课程已完成
你已完成 控制终端
现在,你可以把控制终端与交互式进程管理联系起来。
区分虚拟终端和伪终端。
把终端信号与前台进程组联系起来。
解释
ps输出中的终端名称和?。把终端关闭视为发出信号,而不是保证进程终止。