Linux系统中进程相互之间有哪些关系?

2016-02-19 20:54 7 1 收藏

今天图老师小编给大家精心推荐个Linux系统中进程相互之间有哪些关系?教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - Linux教程 】

作为Linux系统管理员,为了更好的管理进程,就有必要对进程之间的关系有个详细的了解,下面图老师小编就给大家介绍下Linux进程之间的关系,一起来学习下吧。

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

进程组 (process group)

每个进程都会属于一个进程组(process group),每个进程组中可以包含多个进程。进程组会有一个进程组领导进程 (process group leader),领导进程的PID (PID见Linux进程基础)成为进程组的ID (process group ID, PGID),以识别进程组。

代码如下:

$ps -o pid,pgid,ppid,comm | cat《/p》 《p》 PID PGID PPID COMMAND

17763 17763 17751 bash

18534 18534 17763 ps

18535 18534 17763 cat

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

 Linux系统中进程相互之间有哪些关系?

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

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

会话 (session)

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

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

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

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

代码如下:

$ping localhost 》 log &

此时终端显示:

代码如下:

[1] 10141

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

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

代码如下:

$ps -o pid,pgid,ppid,sid,tty,comm

(tty表示控制终端)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

信号可以通过kill

代码如下:

$kill -SIGTERM -10141

或者

代码如下:

$kill -SIGTERM %1

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

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

代码如下:

$cat 》 log &

$fg %1

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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

总结

process group, pgid

session, sid, job, forground, background

fg, kill -pid, &, %

上面就是Linux进程之间的关系介绍了,其实进程之间是有一定的联系的,每个进程都会属于一个进程组,你对进程之间的关系有一定的了解了吗?

来源:http://www.tulaoshi.com/n/20160219/1624788.html

延伸阅读
一般来说用户的输入/输出基本都是通过视进行,但一些例外的情况下可能需要和框架直接发生作用,而在多视的情况下如何在视之间传递数据。 在使用菜单时大家会发现当一个菜单没有进行映射处理时为禁止状态,在多视的情况下菜单的状态和处理映射是和当前活动视相联系的,这样MFC可以保证视能正确的接收到各种消息,但有时候也会产生不便。有一个...
标签: flash教程
   在制作flash动画的时候,可能会有有很的mc     有时会把它放到几个场景中,那么在场景中的跳转如何实现呢?     请看教程吧。      1.     方法一:(使用telltarg...     方法一:(使用telltarget命令)     按钮上的as为...
 层次最直接体现的效果就是遮挡。位于图层调板下方的图层层次是较低的,越往上层次越高。就好像从桌子上渐渐往上堆叠起来的一样。位于较高层次的图像内容会遮挡较低层次的图像内容。我们接着上面制作的人脸图像继续学习,也可以点此下载范例PSD文件。     改变图层层次的方法是在图层调板中按住层往上方或下方拖动,可...
在Microsoft Windows中,每个进程都有它自己的私有地址空间。当使用&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+"指针来引用内存时,&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+"指针的值将引用你自己进程的地址空间中的一个内存地址。你的进程不能创建一銎湟用属于另一个进程的内存&&keyword=%D6%B8...
标签: 电脑入门
一、convert语法及说明 语法: CONVERT(number, from_unit, to_unit) 参数说明 Number 必需。以 from_units 为单位的需要进行转换的数值。 From_unit 必需。数值 number 的单位。 To_unit 必需。结果的单位。 例子如下: 比如,B12单元格的值为200 那么,当我们使用如下公式: =CONVERT(D12,"day","yr")就代表了...

经验教程

609

收藏

28
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部