(进程关系)进程组、会话

控制终端:

    当用户自举时,会创建init进程,进程号为1. init的创建使系统进入多用户状态。对于每个允许登录的设备,intit进程用一次fork,它所生成

的子进程则执行exec(getty)程序。

然后login程序将执行以下操作 :

1、将当前的工作目录设为用户的起始目录(chdir)

2、调用chown改变终端的用户所有权,使登录用户成为它的所有者。

3、将该终端设备的访问权限设为读和写。

4、调用setgid和initgroups设置进程的组ID

5、用login所得到的所有信息初使化环境:起始目录(HOME)、shell(SHELL)、用户名(USER和LOGNAME),以及一个系统默认路径(PATH)。

6、login进程改变为登录用户的用户ID(setuid)并调用该用户的登录shell。如下

execl("/bin/sh","-sh",(char*)0)。

进程组:

进程组是多个进程的集合。

每个进程组有一个组长进程,组长进程的ID和该进程组的ID相同。

setgpid(pid_t pid,pit_t pgid)函数pid进程的进程组ID设置为pgid。如果这两个数相等,则由pid指定的进程变成组长进程,当然进程只有给自己或者其子进程指定组长进程。如果pid=0,则使用调用者的ID。如果pgid==0,则将pid指定的进程ID作为组长ID。

在大多数的作业控制shell中,在fork

会话:

会话是多个进程或者进程组的集合。

来自为知笔记(Wiz)

时间: 2024-10-14 12:42:13

(进程关系)进程组、会话的相关文章

Linux 进程(二):进程关系及其守护进程

进程关系 进程组 进程组是一个或多个进程的集合.通常,它们是在同一作业中结合起来的,同一进程组中的各进程接收来自同一终端的各种信号,每个进程组有一个唯一的进程组ID.每个进程组有一个组长进程,该组长进程的ID等于进程组ID.从进程组创建开始到最后一个进程离开为止的时间称为进程组的生命周期. #include <unistd.h> pid_t getpgrp(void); 返回值:调用进程的进程组ID int setpgid(pid_t pid, pid_t pgid); 返回值:成功,返回0:

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

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

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

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

linux的会话、进程、进程组等概念

1.一些缩写 PID = 进程ID (由内核根据延迟重用算法生成)PPID = 父进程ID(只能由内核修改)PGID = 进程组ID(子进程.父进程都能修改)SID = 会话ID(进程自身可以修改,但有限制,详见下文)TPGID= 控制终端进程组ID(由控制终端修改,用于指示当前前台进程组) 2.关于进程.进程组.会话之前的关系 总体关系: 进程属于一个进程组,进程组属于一个会话,会话可能有也可能没有控制终端 一个或多个进程的集合,进程组属于一个会话.fork()并不改变进程组ID. 进程组组长

第7章 进程关系(4)_前台进程组

4. 前台进程组 (1)前台进程组 ①自动接受终端信号的组称为前台进程组 ②在终端通过ctrl+c等动作产生的信号首先被前台进程组接受. ③在shell启动的若干个进程组默认是父进程所在的组为前台进程组,其他进程组则为后台进程组 ④除非是默认,否则都要通过调度才能成为前台进程组 (2)获取/设置前台进程组ID 头文件 #include <unistd.h> 函数 pid_t tcgetpgrp(void);  //获取前台进程组ID,出错返回-1 int tcsetpgrp(int fd, p

Linux系统开发7 进程关系,守护进程

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> Linux系统开发7  进程关系守护进程 终端 网络终端 Linux PCB结构体信息 进程组 修改子进程.父进程的组ID 会话组 设置一个会话脱离控制终端 生成一个新的会话 守护进程 守护进程模板 获取当前系统时间  终端 在UNIX系统中用户通过终端登录系统后得到一个Shell进程这个终端成为Shell进 程的控制终端Controlling Terminal在讲进程时讲过控制终端是保存在PCB

读书笔记-APUE第三版-(9)进程关系

登录过程 终端登录 init从/etc/ttys中读取终端信息,对每个允许登录的终端,都fork子进程,并执行getty.getty打开终端设备,执行login: execle("/bin/login,"login", "-p", username, (char *)0, envp) login进行用户名密码验证,同时还会进行切换到用户主目录/修改终端设备属主&读写权限/创建进程组/setuid等动作,然后运行login shell. execl(

09.进程关系

1.终端登录 BSD终端登录 a.系统管理员创建通常名为/etc/ttys的文件,其中,每个终端设备都有一行,每一行说明设备名和传递给getty程序的参数,例如,参数之一说明了终端的波特率等. 当程序自举时,内核创建进程ID为1的进程,也就是init进程.init进程使系统进入多用户状态.init进程读文件/etc/ttys,对每一个允许登录的终端设备,init调用一次fork,它所生成的子进程则执行(exec)getty程序. fork and exec init --------------

进程关系

终端登录 inti进程使系统进入多用户状态,init进程读/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所产生的子进程执行getty程序 getty为终端调用open函数,以读写方式打开终端,一旦终端被打开,则文件描述符0,1,2就被设置到该终端.getty输出:“login:”提示用户输入用户名 当用户输入用户名后,getty,以execle(“/bin/login”,”login”,”-p”,username,(char*)0),envp)这行login login得到用