当我们说一个进程有一个控制终端时,我们的意思是该进程本身有一个控制终端,还是该进程所属的会话有一个控制终端?
我曾经认为它是具有控制终端的会话,但后来我阅读了以下内容(从这里),这意味着它是具有控制终端的进程:
进程的属性之一是其控制终端。使用 fork 创建的子进程从其父进程继承控制终端。这样,一个会话中的所有进程都从会话领导者那里继承了控制终端。控制终端的会话领导者称为该终端的控制进程。
Jde*_*eBP 11
的单一UNIX规范描述了在换算的关系控制终端的存在“与会话相关联”。正如它继续指定的那样,控制终端与会话具有 1:1 的关系。“最多有一个控制终端”与一个会话相关联,而“一个控制终端与一个会话相关联”。
FreeBSD设计和实现这本书的方法略有不同,但都达到了相同的地方。共享同一个会话的进程不可能有不同的控制终端,单个终端也不可能成为多个会话的控制终端。
在 FreeBSD 内部,这就是数据结构实际工作的方式。进程结构体有一个指向pgrp代表进程所属进程组的结构体的指针,该结构体又指向session代表进程组所属会话的结构体,而该tty结构体又指向该会话的控制终端的结构体.
在 Linux 内部,事情稍微复杂一些。每个task_struct都有一组指向pid其进程组 ID 和会话 ID 结构的指针;并有另一个指向每个进程signal_struct结构的指针,该结构又直接指向tty控制终端的结构。
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |