控制终端
100%

进程 · 第 2 课

控制终端

学习控制终端如何把会话与交互式输入、信号和 shell 作业控制连接起来。

交互式登录会话可以拥有控制终端:它是与会话关联的终端设备,内核用它处理终端生成的信号和作业控制。进程列表中的 TTY 字段有助于识别这种关联。

终端和伪终端设备

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 作业也仍然可以拥有控制终端。

psTTY 列中,? 通常表示什么?

终端关闭和挂断

终端连接消失时,内核或终端/会话软件可以向相关进程发送 SIGHUP。进程可能终止、捕获信号、忽略信号,也可能已经被安排为在信号后继续运行。disown 等 shell 功能、nohup 等工具、多路复用器和服务管理器都会影响生命周期行为。

因此,关闭终端并不保证从中启动的每个命令都会退出。需要确认持久性时,应检查进程的会话、信号处理、重定向和监督程序。

为什么“关闭终端始终会终止从中启动的每个进程”这一说法不准确?

课程已完成

你已完成 控制终端

现在,你可以把控制终端与交互式进程管理联系起来。

  • 区分虚拟终端和伪终端。

  • 把终端信号与前台进程组联系起来。

  • 解释 ps 输出中的终端名称和 ?

  • 把终端关闭视为发出信号,而不是保证进程终止。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 进程