进程组,作业,会话相关概念

进程间关系:同步,互斥和其他。

shell终端:可运行一个前台作业和任意多个后台作业,这称为作业控制。

进程组:每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。
通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。

注:只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关

作业:Shell分前后台来控制的不是进程而是作业( Job)或者进程组( Process Group) 。一个
前台作业可以由多个进程组成,一个后台也可以由多个进程组成。

Shell可以运行一个前台作业和任意多个后台作业,这称为作业控制。

作业与进程组的区别:如果作业中的某个进程又创建了子进程,则子进程不属于作业。

会话( Session)是一个或多个进程组的集合。

一个会话可以有一个控制终端。建立与控制终端连接的会话首进程被称为控制进程。
一个会话中的多个进程组可被分为一个前台进程组以及一个或多个后台进程组。所以一个会话中,应该包括控制进程(会话首进程),一个前台进程组和任意后台进程组。

内核发送相应的信号给前台进程组中的所有进程。

bg %1,或bg 1:把前台作业放到后台。

fg %1,或fg 1:把后台作业放到前台。

bash运行原理:识别命令(是否合理),fork子进程,子进程执行代码(bash放后台)

终端:打开terminal,建立会话,bash是前台,后台有非常多的作业。

在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们知 道fork会复制PCB中的
信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。

注:没有重定向时,每个进程的标准输入、标准输出和标准错误输出都指向控制终端

#include<stdio.h>
#include<unistd.h>
int main()
{
    printf("pid: %d\n",getpid());
    printf("in: %s\n",ttyname(0));
    printf("out: %s\n",ttyname(1));
    printf("err: %s\n",ttyname(2));
}

时间: 2024-10-05 17:03:14

进程组,作业,会话相关概念的相关文章

linux 进程组 作业 会话

   进程组,作业,会话1. 进程组      每个进程除了有一个进程ID之外,还属于一个进程组.进程组是一个或多个进程的集合.      通常,它们与同一作业相关联,可以接收来自同一终端的各种信号. 每个进程组有一个唯一的进程组ID.每个进程组都可以有一个组长进程.组长进程的标识是其进程组ID等于其进程ID.组长进程可以创建一个进程组,创建该组中的进程,然后终止. 只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关.2.作业     Shell分前后台来控制的不是进程

linux 进程 进程组 作业 会话 控制终端

linux 进程 进程组  会话 控制终端 这几个很容易搞昏,记录一下,防止忘记 1 进程 个人理解 进程就是一段内存中运行的程序 pid 是进程ID 2 进程组 顾名思义,就是一组进程,他们之间不是孤立的,肯那个存在父子 或进程关系,注意linux 下进程是树状组织,  每个进程一定属于一个进程组,也只能属于一个进程组,进程组里面有多个进程  每个进程组都有一个leader,领导进程的PID 就是集成组ID 即 PGID eg: ps -o pid,pgid,ppid,sid,comm  |

linux内核之进程的基本概念(进程,进程组,会话关系)

进程是操作系统的一个核心概念.每个进程都有自己唯一的标识:进程ID,也有自己的生命周期.一个典型的进程的生命周期如图4-1所示. 进程都有父进程,父进程也有父进程,这就形成了一个以init进程为根的家族树.除此以外,进程还有其他层次关系:进程.进程组和会话. 进程组和会话在进程之间形成了两级的层次:进程组是一组相关进程的集合,会话是一组相关进程组的集合. 这样说来,一个进程会有如下ID: ·PID:进程的唯一标识.对于多线程的进程而言,所有线程调用getpid函数会返回相同的值. ·PGID:进

从进程组、会话、终端的概念深入理解守护进程

一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以守护进程 Daemon 方式运行的,通常服务名称以字母d结尾,也就是 Daemon 第一个字母.与普通进程相比它大概有如下特点: 无需控制终端(不需要与用户交互) 在后台运行 生命周期比较长,一般是随系统启动和关闭 二.守护进程必要性 为什么要设置为守护进程,普通进程不可以吗? 当我们在命令行提示符后输入类似./helloworld程序时,在

Linux进程组和会话

Linux的进程相互之间有一定的关系.比如说,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构.我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程. 进程组 (process group) 每个进程都会属于一个进程组(process group),每个进程组中可以包含多个进程.进程组会有一个进程组领导进程 (process group leader),领导进程的PID成为进程组的ID (process group ID, PGID),以识别进程组. $ps -o pi

(转)进程间关系:进程、僵尸进程、孤儿进程、进程组、前台进程组、后台进程组、孤儿进程组、会话、控制终端

不同的shell对使用管道线时创建子进程的顺序不同,本文以bash为例,它是支持作业控制的shell的典型代表. 僵尸进程与孤儿进程 僵尸进程:先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源).消灭僵尸进程的唯一方法是终止其父进程.孤儿进程:该进程的父进程先于自身终止.其特点是PPID=1(init进程的ID).一个孤儿进程可以自成孤儿进程组. 文中用到的缩写 PID = 进程ID (由内核根据延迟重用算法生成)PPID = 父进程ID(只能由内核修改

进程组与会话 Linux Process Groups and Sessions

在类Unix系统中,用户通常会跟各种相关的进程打交道.虽然在登录的时候只有一个终端进程(用户对应的登录shell ,通过这个shell启动各种程序和服务),但通常不久以后就会产生许多相关的进程,例如进行如下动作: 在后台运行无交互的程序(例如bash命令中末位的"&") 通过shell的 job control在各种交互进程之间切换 通过管道启动一组程序 在图形环境下(例如X window system)启用多个终端窗口 为了管理这些进程,内核便对这些进程进行了分组,称其为进程

【LINUX】 会话 进程组 作业 终端

[进程组]  进程组是一个或多个进程的集合.每个进程除了有一个进程ID之外,还属于一个进程组.  每个进程组有一个唯一的进程组ID.每个进程组都可以有一个组长进程. 组长进程的进程组ID等于其进程ID.进程组是否存在和有无组长无关. 每个进程都是属于进程组的,没有独立的进程,除非该进程组中只有一个进程,则可以说这个进程是独立的. 组长进程可以创建一个进程组,创建该组中的进程,然后终止. 但是只要有一个进程存在,则这个进程组就存在,这与其组长进程是否终止无关. 通常,它们与同一作业相关联,可以接收

作业、进程组、会话和守护进程

1. 进程组 每个进程除了有一个进程ID之外,还属于一个进程组.进程组是一个或多个进程的集合.通常,它们与同一作业相关联,可以接收来自同一终端的各种信号.每个进程组有一个唯一的进程组ID.每个进程组都可以有一个组长进程.组长进程的标识是,其进程组ID等于其进程ID.组长进程可以创建一个进组,创建该组中的进程,然后终止.只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关. 2.作业 Shell分前后台来控制的不是进程而是作业(Job)或者进程组(Process Group

进程组和会话

进程组 进程组是指一个或多个进程的集合.通常与一个作业相关联,可以接收来自同一终端的信号.每个进程组有一个唯一的进程组ID,它类似于进程ID,是一个正整数(其实就是组长进程的进程ID).可以通过函数获得 #include<unistd.h> pid_t getpgrp(void); 进程组都有一个组长,组长进程的标识是其进程组ID等于进程ID. 组长可以创建一个组长进程组,创建该进程组的进程,然后终止.进程存在于组长存在没必要关系,只要进程组有一个进程存在,则进程组就存在.进程组生命周期为组长