进程组(Process Groups)简单介绍

进程组(Process Groups)

  1. 定义:
    进程组是一个或多个进程的集合,这些进程通常与同一作业或应用程序相关联。每个进程组都有一个唯一的进程组ID(PGID)。

  2. 组长(Group Leader):
    创建进程组的进程被称为组长。组长的进程ID(PID)通常与进程组ID(PGID)相同。

  3. 层次结构:
    进程组是介于单个进程和会话(session)之间的一个组织层次。

进程组作用

  1. 信号处理:

    • 允许向整个进程组发送信号,而不是单独向每个进程发送。
    • 例如,当你在终端按下Ctrl+C时,SIGINT信号会发送给前台进程组中的所有进程。
  2. 作业控制:

    • 在shell中,每个管道命令通常在一个新的进程组中运行。
    • 这允许shell同时管理多个作业,并控制它们的执行(前台/后台)。
  3. 资源管理:

    • 进程组可以用于系统资源的分配和限制。
    • 某些系统调用(如setpgid())允许进程加入特定的进程组。
  4. 终端控制:

    • 只有一个进程组可以与终端关联(称为前台进程组)。
    • 这决定了哪些进程可以直接从终端读取输入。
  5. 进程生命周期管理:

    • 当一个进程组的组长终止时,内核可能会向该组的其他成员发送SIGHUP信号。
    • 这有助于清理相关的进程,确保资源被正确释放。

应用demo

  1. Shell作业控制:

    command1 | command2 | command3 &
    

    该管道命令会创建一个新的进程组,包含三个进程,并在后台运行。

  2. C语言进程组操作:

    #include <unistd.h>
    
    pid_t getpgrp(void);  // 获取当前进程的进程组ID
    int setpgid(pid_t pid, pid_t pgid);  // 设置指定进程的进程组ID
    
  3. 会话和进程组:
    守护进程通常创建新的会话和进程组,以脱离控制终端:

    pid_t sid = setsid();
    

作用

  1. 进程管理: 简化了多进程应用程序的管理。
  2. 系统设计: 为操作系统提供了一种组织和控制相关进程的方法。
  3. 用户界面: 使shell能够提供作业控制功能,增强用户体验。
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值