Linux 进程关系

转载 2015年07月10日 07:36:08

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

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
  PID  PGID  PPID COMMAND
17763 17763 17751 bash
18534 18534 17763 ps
18535 18534 17763 cat

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

图中箭头表示父进程通过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表示控制终端)

信号可以通过kill

$kill -SIGTERM -10141

或者

$kill -SIGTERM %1

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

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

$cat > log &
$fg %1

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

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

总结


process group, pgid

session, sid, job, forground, background

fg, kill -pid, &, %

Linux内核本身和进程的区别 内核线程、用户进程、用户线程

Linux内核本身和进程的区别 内核线程、用户进程、用户线程 这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程。 其实内核本身不是以进程形式存在的,...
  • adudurant
  • adudurant
  • 2014年04月07日 22:43
  • 1143

linux进程关系

待续...
  • first_wolf
  • first_wolf
  • 2013年08月03日 22:23
  • 513

Linux进程关系

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看...
  • nosodeep
  • nosodeep
  • 2014年04月02日 11:26
  • 327

Linux编程-Linux进程关系

Linux进程关系 一、Linux终端登陆流程 (1)内核进程启动(进程ID 0) (2)内核启动init进程(进程ID 1) (3)init进程读取(Linux-/etc/inittab、B...
  • Magina3
  • Magina3
  • 2015年01月04日 00:02
  • 466

(转)Linux进程关系

本文来源于:http://www.cnblogs.com/vamei/archive/2012/10/07/2713023.html 作者:Vamei 出处:http://www.c...
  • yushengjian
  • yushengjian
  • 2016年01月09日 23:35
  • 123

linux进程关系操作

1.等待进程退出linux中利用wait函数得到子进程的结束信息,其函数原型如下: #include pid_t wait(int * statloc); 调用wait的函数会阻塞,直到该进程的任意一...
  • ubuntulover
  • ubuntulover
  • 2009年08月07日 20:49
  • 906

Linux进程关系包含session

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看到,...
  • qk1992919
  • qk1992919
  • 2017年03月02日 21:08
  • 591

UNIX再学习 -- 进程关系

APUE 第 10 章信号讲完,回过头来看一下第 9 章的进程关系。终端登录和网络登录部分,我们只讲 Linux 系统的。一、终端登录我记得我们讲 root 登录设置时有提到,参看:C语言再学习 --...
  • qq_29350001
  • qq_29350001
  • 2017年05月09日 14:31
  • 465

oracle 数据库组成部分(数据库(各种文件)+实例(SGA PGA + 后台进程))知识

一、SQL server中的实例与数据库 1.SQL中的实例指的是一个SQL server服务器上仅有一个缺省实例。 缺省实例名即为机器名ServerName或IP),如果在同一台机器上再安装SQL ...
  • lan12334321234
  • lan12334321234
  • 2017年04月11日 11:38
  • 285

Linux/UNIX进程关系

进程关系 进程组 每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常他们与同一作业相关联,可接受来自同一终端的各种信号。 #include pid_tgetp...
  • walkerkalr
  • walkerkalr
  • 2014年04月24日 11:37
  • 1078
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux 进程关系
举报原因:
原因补充:

(最多只允许输入30个字)