需要有一种方法来通知内核哪一个进程组是前台进程组,这样,终端设备驱动程序就能了解将终端输入和终端产生的信号送到何处. #include <unistd.h> pid_t tcgetpgrp( int filedes ); 返回值:若成功则返回前台进程组的进程组ID,若出错则返回- int tcsetpgrp( int filedes, pid_t pgrpid ); 返回值:若成功则返回0,若出错则返回- 函数tcgetpgrp返回前台进程组的进程组ID,该前台进程组与在filedes上打开的…
进程关系 进程组 进程组是一个或多个进程的集合.通常,它们是在同一作业中结合起来的,同一进程组中的各进程接收来自同一终端的各种信号,每个进程组有一个唯一的进程组ID.每个进程组有一个组长进程,该组长进程的ID等于进程组ID.从进程组创建开始到最后一个进程离开为止的时间称为进程组的生命周期. #include <unistd.h> pid_t getpgrp(void); 返回值:调用进程的进程组ID int setpgid(pid_t pid, pid_t pgid); 返回值:成功,返回0:…
9 - 进程关系 GitHub 地址 1. 进程组 每个进程除了有一个 进程 ID 外,还属于一个 进程组 .进程组是一个或多个进程的 集合 ,通常,它们是在同一作业中结合起来的,同一进程组中的各进程接受来自同一终端的各种信号.每一个进程组有一个唯一的 进程组 ID . 函数 getpgrp 返回调用进程的进程组 ID: #include <unistd.h> pid_t getpgrp(void); //返回值:调用此函数的进程的进程组ID 函数 getpgid 用于获取指定 \(pid\)…
一.控制终端 对话期和进程组有一些其他特性: 一个对话期可以有一个单独的控制终端.通常是我们在其上登录的终端设备或伪终端设备. 建立与控制终端连接的对话期首进程,被称之为控制进程 一个对话期中的几个进程组可以被分成一个前台进程组以及一个或几个后台进程组 如果一个对话期有一个控制终端,则它有一个前台进程组,其他进程组则为后台进程组. 无论何时键入终端键(Ctrl-C)或退出键(Ctrl-\),就会造成中断信号或退出信号送至前台进程组的所有进程. 如果终端界面检测到调制解调器已经脱开连接,则将挂断信…
每一个进程除了有一个进程ID外,还属于一个进程组.  进程组是一个或多个进程的集合,通常情况下,他们是在同一作业中结合起来的,同一进程组的个进程接受来自同一终端的各种信号. 每一个进程组有一个唯一的进程ID. 组长进程 每个进程组都有一个组长进程,组长进程的进程组ID等于其进程ID. 进程组组长可以创建一个进程组,创建进程组中的进程然后种植.只要进程组中还有任意一个进程存在,那么这个进程组就存在. 从进程组的创建到最后一个进程离开的时间去成为进程组的生命周期 函数getpgrp返回调用进程的进程…
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)…
5. 贯穿案例2:mini shell(2) (1)己经完成的功能:pwd.cd.exit命令 (2)阶段性目标: ①env.export.echo及其他命令 ②标准输入.输出重定向">"."<".">>" ③设置后台进程 (3)存在问题:当mshell(后台进程)要读写终端时(如执行date时),进程会被暂停.解决方案见下一章的<信号> [编程实验]mini  shell //job.h #ifndef __…
在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程.执行新程序.终止进程等.在使用fork( )产生新进程后,就出现了进程父子进程的概念,这是进程间的关系.本章更加详细地说明进程间的关系,包括:进程组.会话.作业等. 终端登录 当我们通过硬件终端而非网络终端登录到系统时,UNIX会有一个登录流程,该流程是个大概的过程,各个实现可能存在细微差别,但总体流程不变. 在通过终端登录时,init进程负责为每个终端fork一个子进程,由子进程对应登录终端设备.init进程会fo…
本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,用来说明设备名和传到getty程序的参数. 当系统自举时,内核创建进程ID为1的进程(init进程).init进程读取文件/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所生成的子进程则exec getty程序,如下图所示: getty对终端设备调用open…
[a] getpgid / setpgid #include <unistd.h> pid_t getpgid(pid_t pid) //成功返回进程组 ID,出错返回 -1 int setpgid(pid_t pid, pid_t pgid) //成功返回0,出错返回 -1  setpgid 用于改变指定进程的进程组或创建新的进程组 若 pid 为 0,则将调用进程自身转移到指定进程组 若 pgid 为 0,则以 pid 为首进程创建新的进程组 若二者同时为 0,即以调用进程自身为首进程创建…