Linux 终端与进程

有趣的问题

Linux 中的 终端,控制台,TTY,PTY 究竟是什么?它们与进程有什么关系?

历史回顾:控制台 (Console)

控制台是一个直接控制设备的面板 (属于设备的一部分)

计算机设备的控制台:按键 & 指示灯 (键盘 & 显示器)

早期的电子计算机必然有一个控制台

Linux 终端与进程_第1张图片

历史回顾:终端 (Terminal)

终端是一台独立于计算机的机器,是能够和计算机进行交互的设备

Linux 终端与进程_第2张图片

TTY -- 即:TeleType Writer 电传打字机,一种终端设备

历史发展进程

电传打字机已经淘汰

计算机上的输入设备和显示设备从主机独立出来

控制台与终端的物理表现形式逐渐趋近

计算机开始支持多任务处理

Linux 终端与进程_第3张图片

终端与进程

TTY 演变为 Linux 中的抽象概念,对于进程而言 TTY 是一种输入输出设备

Linux 终端与进程_第4张图片

各种终端类型

Linux 终端与进程_第5张图片

内核终端模拟器

Linux 终端与进程_第6张图片

伪终端模型

Linux 终端与进程_第7张图片

伪终端 (gnome-terminal)

Linux 终端与进程_第8张图片

伪终端程序设计 (master)

创建 PTY 主从设备:master = posix_openpt(O_RDWR);

创建主设备权限:

  • grantpt(master);  // 获取设备使用权限
  • unlockpt(master); // 解锁设备,为读写做准备

读写主设备

  • c = read(master, &rx, 1);
  • len = write(master, txbuf, strlen(txbuf));

Linux 终端与进程_第9张图片

伪终端程序设计 (slave)

打开 PTY 从设备:slave = open(path_to_slave, O_RDWR);

读写从设备:

  • write(slave, "Delphi\r", 7);
  • read(slave, buf, sizeof(buf) - 1);

Linux 终端与进程_第10张图片

思考

终端必然与进程关联才有意义!那么进程之间除了父子关系,是否还有其他关系?

你可能感兴趣的:(Linux系统编程,linux)