
要弄明白守护进程就必须先讲清楚进程、进程组、会话、终端一、进程当我们运行一个应用时根据冯诺依曼体系结构必须把这个应用的代码、数据以及PCB(进程控制块process control block也就是关于进程的描述结构体)加载到内存由CPU调度执行对于已经被加载到内存中等待CPU调度执行的应用就叫做进程进一步来讲进程就是应用等待执行的状态就是PCB 程序本身的数据代码注PCB内部会有一个指针指向程序本身的数据代码这里为了便于理解把二者区分开来了二、进程组为了将多个进程统一管理将它们放在一个统一的组里面这个组就叫做进程组三、终端首先我们要弄明白屏幕和终端的区别简单来说屏幕是呈现终端内容的载体只要写在终端输出缓冲区的内容都会被屏幕读取并展示在Linux中终端其实是一个设备或者说是一个伪设备它不负责画任何东西只负责存储用户和进程输入输出的内容当你在键盘上输入一个个字符时你会很直观地看到你输入的字符在你的屏幕上显现但是屏幕不是终端事实上这个流程如下1、你在键盘上输入字符后键盘会向操作系统发送中断2、操作系统收到中断后将你输入的内容交给终端的输入缓冲区3、正在读这个终端设备的进程(前台进程)从输入缓冲区取走这个字符根据进程本身的需求决定是否写入终端的输出缓冲区4、如果写入终端的输出缓冲区终端会把内容交给屏幕显示进而得到看到你刚刚输入的字符举个例子当你登录Linux时会叫你输入密码但是你看不到密码回显就是因为只把密码给了终端的输入缓冲区但是读取终端输入缓冲区的进程没有把它写到终端的输出缓冲区所以没有看到回显事实上可以试试以下两个指令stty -echo关闭回显stty echo开启回显总结起来终端的输入缓冲区的内容由键盘输入决定进程(前台进程)读取终端的输出缓冲区的内容由进程(任何进程)决定屏幕设备读取(显示)终端只起到转发(有时还会加工)的作用四、会话所谓会话就是一个或多个进程组的集合该集合内的进程可以共享同一个终端也可以没有终端事实上虽然所有的进程组共享同一个终端但并非所有的进程都有资格访问终端的输入缓冲区试想一下你键盘输入一个数据hello如果被A进程读走heB进程读走llo那双方得到的信息都不完整这就可能会造成响应错误的结果所以必须保证读取终端的输入缓冲区的进程是唯一的这个唯一的进程也就叫做前台进程值得注意的一点是前台进程可以有多个多个前台进程构成的集合叫做前台进程组但是在前台进程组中能访问终端输入缓冲区的只有一个前台进程也就说前台进程有读取输入缓冲区的能力但具体谁读要看情况分析其次对于一个会话我们需要有一个管理者也就是首领进程首领进程在大多数情况下都是唯一的前台进程这也就意味着当运行一些程序时首领进程必须有将该程序提到前台去的能力与前台进程相反的进程也就是后台进程最后要补充的一点是终端发出的信号(CtrlC CtrlZ Ctrl\\)所有前台进程都可以收到这要与读取终端区分开来最后说一个现象我们每次登录Linux终端版时首先会看到根据前面所说你看到的内容都是进程往终端的输出缓冲区里写的东西这个进程是什么他就是bash进程(shell)大家如果有什么感兴趣的内容欢迎私信或者评论区留言