第9章进程关系总结

1 进程组与进程组ID

 获取进程组ID

pid_t getpgrp()

pid_t getpgid(pid_t pid)

 设置进程组ID

int setpgid(pid_t pid,pid_t pgid)

2 会话
 一次登录期间产生的所有进程组都属于同一个会话,会话是进程组的集合

 通过setsid可以创建会话,调用setsid的进程不能是进程组的组长进程

 1)该进程将成为新会话首进程

 2)该进程成为新进程组的组长进程

 3)该进程没有控制终端

 为了保证调用setsid函数的进程不是组长进程,一般调用一次fork函数,然后将父进程终止,用子进程调用setsid(该子进程一定不是组长进程)

pid_t setsid()

pid_t getsid(pid_t pid)

3 控制终端

 会话可以有控制终端

 如果会话有控制终端,则其包含的进程组中,有一个是前台进程组,其他的是后台进程组

 中断与退出信号只会发送给前台进程组进程 

 终端断开连接,则发送信号给控制进程(会话首进程)

 对于一个在filedes打开的控制终端,可以通过以下函数获取或设置前台进程组

pid_t tcgetpgrp(int filedes)

int tcsetpgrp(int filedes,pid_t pgrpid)

 也可以获取会话首进程

pid_t tcgetsid(int filedes)

4 作业控制

 作业控制允许在一个终端上启动多个作业(进程组),控制哪个作业可以访问终端,哪些作业在后台运行

 后台进程默认不可以从终端读,但是可以向终端写

 如果后台进程试图读终端,将产生SIGTTIN信号暂停后台进程,shell可以通过fg命令将后台进程送入前台运行,同时进程结束暂停继续运行

 

 

时间: 2024-12-16 23:25:49

第9章进程关系总结的相关文章

APUE学习笔记:第九章 进程关系

9.1 引言 本章将更详尽地说明进程组以及POSIX.1引入的会话的概念.还将介绍登陆shell(登录时所调用的)和所有从登陆shell启动的进程之间的关系. 9.1 终端登陆 系统管理员创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,每一行说明设备名传递给getty程序的参数.当系统自举时,内核创建进程ID为1的进程,依旧是init进程.init进程使系统进入多用户状态.init进程读文件/etc/ttys,对每一个允许登陆的终端设备,init调用一次fork,所生成的子进程则

apue学习笔记(第九章 进程关系)

本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,用来说明设备名和传到getty程序的参数. 当系统自举时,内核创建进程ID为1的进程(init进程).init进程读取文件/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所生成的子进程则exec getty程序,如下图所示: getty对终端设备调用open

第7章 进程关系(2)_进程链和进程扇

2. 进程链和进程扇 (1)创建进程链 ①进程链:就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进程,这样依次往下循环,如下图所示. ②关键实现:判断出如果是父进程则退出,保证父进程只会创建一个子进程.如果是子进程继续创建接下来的进程再退出. [编程实验]构建进程链 //process_link.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, c

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

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

第7章 进程关系(1)_守护、孤儿和僵尸进程

1. 守护.孤儿和僵尸进程 (1)守护进程 ①守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,在系统关闭时终止. ②所有守护进程都以超级用户(用户ID为0)的优先权运行. ③守护进程没有控制终端 ④守护进程的父进程都是init进程(1号进程). (2)孤儿进程:父进程先结束,子进程就成为孤儿进程,会由1号进程(init进程)领养. [编程实验]产生孤儿进程 //process_orphen.c #include <unistd.h> #include <std

第7章 进程关系(5)_贯穿案例2:mini shell(2)

5. 贯穿案例2:mini shell(2) (1)己经完成的功能:pwd.cd.exit命令 (2)阶段性目标: ①env.export.echo及其他命令 ②标准输入.输出重定向">"."<".">>" ③设置后台进程 [编程实验]mini  shell //job.h //job.c //mshell.c

第十三章 进程、线程类的实现

                                        第十三章   进程.线程类的实现         多线程是指在一个进程内可以同时运行多个任务,每个任务由一个单独的线程来完成.线程是进程运行的基本单位,一个进程中可以同时运行多个线程.如果程序被设置为多线程方式,可以提高程序运行的效率和处理速度. 多个线程共用一个进程的资源:进程的调度.切换是在10ms的"时钟滴答"定时中断程序里进行.如果一个线程获得CPU,那么在下一个Tick到来前:是不可能被切换出去的

(七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程

. . . . . 目录 (一) 一起学 Unix 环境高级编程(APUE) 之 标准IO (二) 一起学 Unix 环境高级编程(APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程(APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程(APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程(APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系

Linux内核分析——第三章 进程管理

第三章 进程管理 3.1 进程 1.进程就是处于执行期的程序:进程就是正在执行的程序代码的实时结果:进程是处于执行期的程序以及相关的资源的总称:进程包括代码段和其他资源. 线程:是在进程中活动的对象. 2.执行线程,简称线程,是在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 3.内核调度的对象是线程,而不是进程.Linux对线程并不特别区分,视其为特殊的进程 4.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.在线程之间可以共享虚拟内存,但每个都拥