一个进程可以通过fork()调用创建子进程,这些进程就可以构成一个进程组。
进程组
---------------------------------------------
进程组是一个或多个进程的集合。每个进程组有一个称为组长的进程,组长进程就是其进程号(pid)等于进程组号(gid)的进程(即进程组号等于组长的进程号)。进程组的概念有很多用途,最常见的是我们在终端上向前台执行程序发出终止信号(Ctrl-C),同时终止整个进程组的所有进程。
(1). Shell上的一条命令行形成一个进程组
(2). 每个进程属于一个进程组
(3). 每个进程组有一个领头进程(组长)
(4). 进程组的生命周期到组中最后一个进程终止, 或加入其他进程组为止
(5). getpgrp: 获得进程组id, 即领头进程的pid
(6). 前台进程组和后台进程组
(7). 进程A(假设该进程为组长)和其子进程B属于同一进程组,它们的进程组号(task_struct.gid)都为进程A的进程号(A.pid)
会话
---------------------------------------------
会话期(Session,或者称为会话)则是一个或多个进程组的集合。通常情况下,用户登录后所执行的所有程序都属于一个会话期,而其登录shell则是会话期首进程(Session leader),并且它所使用的中断就是会话期的控制终端(Controlling Terminal),因此会话期的首进程通常也被称为控制进程(Controlling process)。当我们退出登录(logout)时,所有属于这个会话期的进程都将被终止。
(1). 一次登录形成一个会话
(2). 一个会话可包含多个进程组, 但只能有一个前台进程组.
(3). setsid()可建立一个新的会话;如果调用该函数的进程不是进程组的领头进程, 该函数才能建立新的会话.
调用setsid()之后, 调用进程将成为新会话的领头进程.
控制终端
---------------------------------------------
(1) 会话的领头进程打开一个终端之后, 该终端就成为该会话的控制终端 (SVR4/Linux)
(2) 与控制终端建立连接的会话领头进程称为控制进程 (session leader)
(3) 一个会话只能有一个控制终端
(4) 产生在控制终端上的输入和信号将发送给会话的前台进程组中的所有进程
(5) 终端上的连接断开时(比如网络断开或Modem断开), 挂起信号将发送到控制进程(session leader)
分享到:
相关推荐
本主题“LINUX进程控制编程”旨在深入探讨这些概念,并教你如何在实际编程中应用它们。以下是对这个主题的详细阐述: 一、进程的基本概念 进程是程序在内存中的执行实例,每个进程都有独立的地址空间。在Linux中,...
编写 Linux 守护进程需要了解多个概念,如子进程、进程组、会晤期、信号机制、文件、目录和控制终端等。 要编写一个 Linux 守护进程,需要遵循以下八条经验: 1. 屏蔽一些有关控制终端操作的信号,以防止守护进程...
2. **调用setsid函数**:setsid函数用于创建新的会话和进程组,使进程脱离控制终端,成为新会话的首进程。这一步至关重要,因为守护进程不应有控制终端。同时,了解进程组和会话的概念也很重要。进程组是一组进程,...
本阅读笔记将深入探讨Linux进程的创建、进程控制以及守护进程的实现。 首先,让我们了解一下Linux中的进程创建。在Linux中,最常用的创建新进程的方式是使用`fork()`系统调用。`fork()`会创建一个与父进程几乎完全...
会话是一组相关进程的集合,通常与一个控制终端相关联。进程组是共享同一会话的进程集合。一个进程可以有子进程,形成进程树结构。在终端上运行的进程可以分为前台进程和后台进程。前台进程接收用户的输入,而后台...
3. **进程组和会话**:进程可以组织成进程组,多个进程组组成一个会话,这对于控制进程的执行有重要作用,如`bg`和`fg`命令用于在后台和前台切换进程。 通过以上介绍,你应该对Linux打印进程树有了全面的理解。熟练...
【操作系统Linux进程实验报告】 在计算机操作系统教程中,实验报告主要关注的是Linux操作系统的进程管理。这个实验旨在让学生深入理解并熟悉Linux环境下的进程创建、执行以及管理。实验内容包括了四个关键的系统...
2. **脱离控制终端、登录会话和进程组**:调用`setsid()`函数,使得进程成为新的会话组长和进程组长,从而与原来的登录会话和终端分离,避免受到终端的影响。 3. **禁止重新打开控制终端**:再进行一次`fork()`,...
守护进程(Daemons)是Linux系统中一类特殊的服务程序,它们通常在后台运行,没有控制终端,也不依赖于任何登录Shell。守护进程的设计目标是高可靠性,能够应对各种异常情况,持续运行并提供服务,比如网络服务、...
2. **与环境隔离**:守护进程需要与创建它的环境进行隔离,包括关闭未使用的文件描述符、脱离控制终端、会话和进程组、改变工作目录以及清除文件创建掩模等。 3. **启动方式**:守护进程可以通过多种方式启动,比如...
根据`/proc/<pid>/status`文件中的`State`字段以及常用的`ps`命令输出,Linux进程主要有以下几种状态: 1. **D (Uninterruptible Sleep)**:不可中断睡眠状态。通常发生在进程等待某种I/O操作完成时(如磁盘读写)...
- **会话管理**:通过 `setsid()` 创建的进程可以脱离终端控制,实现后台运行。 #### 四、总结 Linux提供的多种进程间通信机制各有优势和局限性,选择合适的通信方式取决于具体的应用场景。同时,正确地管理进程...
* x:显示没用控制终端的进程。 * -l:长格式显示更加详细的信息。 * -e:显示所有进程。 例如,使用 `ps aux` 命令可以查看系统中所有的进程。 2. top 命令:持续监听进程运行状态 top 命令用于持续监听进程的...
2. **脱离控制终端、登录会话和进程组**:守护进程不应与登录会话或控制终端关联,以确保其独立性。使用`setsid()`函数可以使进程成为一个新的会话组长和进程组长,从而脱离原有的登录会话和控制终端。 3. **禁止...
守护进程必须摆脱对控制终端、会话、进程组和工作目录的依赖,以及关闭不必要的文件描述符。通常,守护进程的创建步骤包括: 1. 脱离控制终端:调用`setsid()`创建新的会话并成为会话首进程。 2. 再次`fork()`:...
【Linux进程控制】是Linux程序设计中的核心概念,关乎到系统的多任务运行和资源管理。在Linux中,进程是程序的实例,具有独立的内存空间和执行上下文。本指导书着重于理解和实践Linux进程控制的相关操作。 1. **...
3. 调用setsid()函数创建新的会话和进程组,使进程成为会话组长,不再与控制终端关联。 4. 更改工作目录:通常将工作目录更改为根目录("/"),以避免对特定文件系统的依赖。 5. 关闭不必要的文件描述符:关闭所有...
Linux 系统中守护进程是指在后台运行而又无终端或登录 shell 与之相关联的进程。守护进程可以周期性地执行某种任务或等待处理某些特定的事件,是一种很有用的进程。Linux 的大多数服务器进程就是用守护进程实现的,...
在 Linux 系统中,每个用户登录一次终端时就会产生一个会话,每个会话有一个会话首进程,即创建会话的进程,建立与终端连接的就是这个会话首进程,也被称为控制进程。一个会话可以包括多个进程组,这些进程组可被...
3. **无终端控制**:守护进程不会控制任何终端,其TTY列通常显示为“?”符号,TPGID(终端进程组ID)为-1,这表明它们不在任何终端上运行。 4. **独立的进程组和会话**:每个守护进程都是自身所属进程组和会话的...