进程组和会话期1

preview
需积分: 0 0 下载量 191 浏览量 更新于2022-08-08 收藏 41KB DOCX 举报
在操作系统中,进程组和会话期是两个重要的概念,它们在管理进程和实现作业控制中起到关键作用。本文将详细阐述这两个概念及其相关知识点。 进程组(Process Group)是一个由一个或多个进程组成的集合,它们共享同一个进程组ID(PGID),这个ID是一个正整数,通常是该组组长进程的PID。组长进程有权创建和管理进程组,但一旦其子进程调用`exec`函数执行新的程序,父进程便无法再改变子进程的进程组ID。在作业控制的shell环境下,通常会通过`fork`和`setpgid`函数来创建并设置进程组,确保子进程具有明确的进程组归属,避免竞争条件的发生。`setpgid`函数用于设定进程的进程组ID,它可以将指定的进程(或当前进程)放入指定的进程组。 接着,我们来看会话(Session)。会话是由一个或多个进程组构成的更高层次的组织单位,通常与终端交互相关。比如在shell中,管道命令行如`proc1 | proc2 & proc3 | proc4 | proc5`可以组成一个会话。每个会话有且只有一个会话首进程(Session Leader),它是通过调用`setsid`函数创建的。当一个进程调用`setsid`时,如果它不是任何进程组的组长,它会成为新会话的首进程,同时创建一个新的进程组,并且与任何控制终端断开连接。如果进程已经是某个进程组的组长,`setsid`将返回错误,因此通常会在`fork`后让父进程退出,子进程继续执行并调用`setsid`。 `setsid`函数的主要作用包括: 1. 使进程脱离原有的会话,不再受会话首进程的影响。 2. 使进程脱离其进程组,成为新进程组的组长,拥有独立的进程组ID。 3. 割断进程与控制终端的关联,使得进程无控制终端,这在实现后台运行和无终端进程时非常有用。 总结来说,进程组和会话期是多进程系统中管理和调度进程的重要机制。进程组用于接收终端发送的信号,而会话则更高级地组织进程,尤其是在实现作业控制和终端交互时。理解这些概念对于编写需要进行复杂进程管理的程序,如守护进程或后台作业,是非常关键的。