Linux进程间的关系介绍

  介绍

这篇文章主要讲解了“Linux进程间的关系介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux进程间的关系介绍”吧!

Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看的到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构。我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程。

<强>进程组(过程组)

每个进程都会属于一个进程组(过程组),每个进程组中可以包含多个进程。进程组会有一个进程组领导进程(进程组长),领导进程的比例积分微分(PID见Linux进程基础)成为进程组的ID(过程组ID, PGID),以识别进程组。

代码如下:


$ p - o PID, PGID, ppid,通讯| cat

  & lt; p>,PID PGID, PPID命令
bash
17763 17763 17751 18534 18534 17763 ps
18535 18534 17763猫


PID为进程自身的ID, PGID为进程所在的进程组的ID, PPID为进程的父进程ID。从上面的结果,我们可以推测出如下关系:

癓inux进程间的关系介绍"

图中箭头表示父进程通过叉和exec机制产生子进程每分钟和猫都是bash的子进程。进程组的领导进程的PID成为进程组ID。领导进程可以先终结。此时进程组依然存在,并持有相同的PGID,直到进程组中最后一个进程终结。

我们将一些进程归为进程组的一个重要原因是我们可以将信号发送给一个进程组。进程组中的所有进程都会收到该信号。我们会在下一部分深入讨论这一点。

<强>会话(会话)

更进一步,在壳牌支持工作控制(作业控制)的前提下,多个进程组还可以构成一个会话(会话).bash (Bourne-Again shell)支持工作控制,而sh (Bourne shell)并不支持。

会话是由其中的进程建立的,该进程叫做会话的领导进程(会话)领袖。会话领导进程的PID成为识别会话的SID(会话ID)。会话中的每个进程组称为一个工作(工作)。会话可以有一个进程组成为会话的前台工作(前景),而其他的进程组是后台工作(背景),每个会话可以连接一个控制终端(控制端)。当控制终端有输入输出时,都传递给该会话的前台进程组。由终端产生的信号,比如CTRL + Z, CTRL + \,会传递到前台进程组。

会话的意义在于将多个工作囊括在一个终端,并取其中的一个工作作为前台,来直接接收该终端的输入输出以及终端信号。其他工作在后台运行。

一个命令可以通过在末尾加上,方式让它在后台运行:

代码如下:


ping本地主机比美元;日志,


此时终端显示:

代码如下:


[1] 10141


括号中1的表示工作号,而10141年为PGID

我们通过如下方式查询更加详细的信息:

代码如下:


$ p - o pid, PGID, ppid, sid, tty,通讯


(tty表示控制终端)

信号可以通过杀死

代码如下:


杀死sigterm -10141美元


或者

代码如下:


杀死sigterm % 1美元


的方式来发送给工作组。上面的两个命令,一个是发送给PGID(通过在PGID前面加——来表示是一个PGID而不是pid),一个是发送给工作1(% 1),两者等价。

一个工作可以通过fg美元从后台工作变为前台工作:

代码如下:


猫比美元;日志,fg % 1美元


当我们运行第一个命令后,由于工作在后台,我们无法对命令进行输入,直到我们将工作带入前台,才能向猫命令输入。在输入完成后,按下CTRL + D来通知壳输入结束。

进程组(工作)的概念较为简单易懂。而会话主要是针对一个终端建立的。当我们打开多个终端窗口时,实际上就创建了多个终端会话。每个会话都会有自己的前台工作和后台工作。这样,我们就为进程增加了管理和运行的层次。在没有图形化界面的时代,会话允许用户通过壳进行多层次的进程发起和管理。比如说,我可以通过壳发起多个后台工作,而此时标准输入输出并不被占据,我依然可以继续其它的工作,如今,图形化界面可以帮助我们解决这一需求,但工作组和会话机制依然在Linux的许多地方应用。

感谢各位的阅读,以上就是“Linux进程间的关系介绍”的内容了,经过本文的学习后,相信大家对Linux进程间的关系介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

Linux进程间的关系介绍