Linux-进程、进程组、做业、会话、控制终端详解

1、进程服务器

  传统上,Unix操做系统下运行的应用程序、 服务器以及其余程序都被称为进程,而Linux也继承了来自unix进程的概念。必需要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体;而进程能够认为是已经被OS从磁盘加载到内存上的、动态的、可运行的指令与数据的集合,是在运行的动态实体。这里指的 指令和数据的集合能够理解为Linux上ELF文件格式中的.text .data数据段。网络

2、进程组session

  每一个进程除了有一个进程ID以外,还属于一个进程组,那什么是进程组呢?并发

  顾名思义,进程组就是一个或多个进程的集合。这些进程并非孤立的,他们彼此之间或者存在父子、兄弟关系,或者在功能上有相近的联系。每一个进程都有父进程,而全部的进程以init进程为根,造成一个树状结构spa

  那为啥Linux里要有进程组呢?其实,提供进程组就是为了方便对进程进行管理。假设要完成一个任务,须要同时并发100个进程。当用户处于某种缘由要终止 这个任务时,要是没有进程组,就须要手动的一个个去杀死这100个进程,而且必需要严格按照进程间父子兄弟关系顺序,不然会扰乱进程树。有了进程组,就能够将这100个进程设置为一个进程组,它们共有1个组号(pgrp),而且有选取一个进程做为组长(一般是“辈分”最高的那个,一般该进程的ID也就做为进程组的ID)。如今就能够经过杀死整个进程组,来关闭这100个进程,而且是严格有序的。组长进程能够建立一个进程组,建立该组中的进程,而后终止。只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关操作系统

   进程一定属于一个进程组,也只能属于一个进程组 一个进程组中能够包含多个进程。 进程组的生命周期从被建立开始,到其内全部进程终止或离开该组。unix

  内核中,sys_getpgrp()系统调用用来获取当前进程所在进程组号;sys_setpgid(int pid, int pgid)调用用来设置置顶进程pid的进程组号为pgid。继承

3、做业生命周期

  Shell分先后台来控制的不是进程而是做业(Job)或者进程组(Process Group)。一个前台做业能够由多个进程组成,一个后台也能够由多个进程组成,Shell能够运行一个前台做业任意多个后台做业,这称为做业控制。进程

  做业与进程组的区别:若是做业中的某个进程又建立了子进程,则子进程不属于做业。一旦做业运行结束,Shell就把本身提到前台,若是原来的前台进程还存在(若是这个子进程还没终止),它自动变为后台进程组。

4、会话

  再看下会话。因为Linux是多用户多任务的分时系统,因此必需要支持多个用户同时使用一个操做系统。当一个用户登陆一次系统就造成一次会话 。一个会话可包含多个进程组,但只能有一个前台进程组每一个会话都有一个会话首领(leader),即建立会话的进程。 sys_setsid()调用能建立一个会话。必须注意的是,只有当前进程不是进程组的组长时,才能建立一个新的会话。调用setsid 以后,该进程成为新会话的leader。

  一个会话能够有一个控制终端。这一般是登录到其上的终端设备(在终端登录状况下)或伪终端设备(在网络登录状况下)。创建与控制终端链接的会话首进程被称为控制进程。一个会话中的几个进程组可被分为一个前台进程组以及一个或多个后台进程组。因此一个会话中,应该包括控制进程(会话首进程),一个前台进程组和任意后台进程组。 

  一次登陆造成一个会话

  一个会话可包含多个进程组,但只能有一个前台进程组

5、控制终端

  会话的领头进程打开一个终端以后, 该终端就成为该会话的控制终端 (SVR4/Linux)  

  与控制终端创建链接的会话领头进程称为控制进程 (session leader) 

  一个会话只能有一个控制终端 

  产生在控制终端上的输入和信号将发送给会话的前台进程组中的全部进程 

  终端上的链接断开时 (好比网络断开或 Modem 断开), 挂起信号将发送到控制进程(session leader)

 

  进程属于一个进程组,进程组属于一个会话,会话可能有也可能没有控制终端。通常而言,当用户在某个终端上登陆时,一个新的会话就开始了。进程组由组中的领头进程标识,领头进程的进程标识符就是进程组的组标识符。相似地,每一个会话也对应有一个领头进程

  同一会话中的进程经过该会话的领头进程和一个终端相连,该终端做为这个会话的控制终端。一个会话只能有一个控制终端,而一个控制终端只能控制一个会话。用户经过控制终端,能够向该控制终端所控制的会话中的进程发送键盘信号。

 

   同一会话中只能有一个前台进程组,属于前台进程组的进程可从控制终端得到输入,而其余进程均是后台进程,可能分属于不一样的后台进程组。

   当咱们打开多个终端窗口时,实际上就建立了多个终端会话。每一个会话都会有本身的前台工做和后台工做

相关文章
相关标签/搜索