进程关系与守护进程

[[进程组]] [[Bash会话]] [[守护进程]] [[作业控制]]

什么是终端

输入单元(键盘),主机[cpu,内存] ,输出单元(一般是显示器,音频输出)

一般我们将输入,输出单元称之为 终端

终端: 能产生数据,也能显示数据

物理终端: 传统的显示器/键盘

**软件终端(**伪终端): 主要是通过tcp/ip协议实现,他能模拟出来一个能实现 数据输入和输出的终端 如 ssh telnet…

只要能实现数据输入(read,write)和输出的统称为终端

在linux 中有物理终端,也有虚拟终端(伪终端)

ssh终端流程

详细解释连接 : https://blog.csdn.net/dog250/article/details/78766716?ops_request_misc=%7B%22request%5Fid%22%3A%22164234291816781683914809%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=164234291816781683914809&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-18-78766716.first_rank_v2_pc_rank_v29&utm_term=linux+伪终端&spm=1018.2226.3001.4187

  1. sshd服务会打开一个 dev/ptmx 这个文件,它是一个伪终端主设备文件
  2. bin/bash会打开一个 dev/pts[0,1…] 他也是一个伪终端从设备文件

ptmx/ptsx 通过伪终端设备驱动程序模拟输入输出的功能

bin/bash进程就可以实现数据读取和写入

输入单元[ssh客户端] —> /bin/bash 进程 —> 输出[ssh客户端]

bin/bash 主要是启动之后,对终端数据的读取和写入就是通过pts实现的

可以使用strace来追踪整个sshd服务连接的过程

总结

通过 ssh client 连接 sshd服务(守护进程,他的实现是tcp/ip协议)

然后sshd接受客户端连接之后,clone/fork一个进程,同时打开伪终端主设备文件 /dev/ptmx,然后fork一个进程,同时启动 /bin/bash 进程,改进程会打开一个伪终端从设备文件 /deb/pts ,这个伪终端能实现数据输入,数据输出.

主从终端设备通过伪终端设备驱动程序进程通信