zoukankan      html  css  js  c++  java
  • linux的会话、进程、进程组等概念

    1.一些缩写

    PID = 进程ID (由内核根据延迟重用算法生成)
    PPID = 父进程ID(只能由内核修改)
    PGID = 进程组ID(子进程、父进程都能修改)
    SID = 会话ID(进程自身可以修改,但有限制,详见下文)
    TPGID= 控制终端进程组ID(由控制终端修改,用于指示当前前台进程组)

    2.关于进程、进程组、会话之前的关系

    总体关系:

    进程属于一个进程组,进程组属于一个会话,会话可能有也可能没有控制终端

    一个或多个进程的集合,进程组属于一个会话。fork()并不改变进程组ID。

    进程组组长:
    PID与PGID相等的进程。组长可以改变子进程的进程组ID,使其转移到另一进程组。
    例如一个shell进程(下文均以bash为例),当使用管道线时,如echo "hello" | cat,bash以第一个命令的进程ID为该管道线内所有进程设置进程组ID。此时echo和cat的进程组ID都设置成echo的进程ID。
    前台进程组
    该进程组中的进程能够向终端设备进行读、写操作的进程组。
    登陆shell(例如bash)通过调用tcsetpgrp()函数设置前台进程组,该函数将终端设备的fd(文件描述符)与指定进程组关联。成为前台进程组的进程其TPGID=PGID,常常可以通过比较他们来判断前后台进程组。
    后台进程组
    一个会话中,除前台进程组、会话首进程以外的所有进程组。该进程组中的进程能够向终端设备写,但是当试图读终端设备时,将会收到SIGTTIN信号,并停止。登录shell可以根据设置在终端上发出一条消息[1]通知用户有进程欲求读终端。
    前台进程组ID只能有一个,而后台进程组同时可存在多个。后台进程组的PGID≠TPGID。
    组长进程:
      组长进程标识: 其进程组ID==其进程ID
      组长进程可以创建一个进程组,创建该进程组中的进程,然后终止
      只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关
      进程组生存期: 进程组创建到最后一个进程离开(终止或转移到另一个进程组)
    建立新会话:setsid()函数
      该调用进程是组长进程,则出错返回
        先调用fork, 父进程终止,子进程调用
      该调用进程不是组长进程,则创建一个新会话
        •该进程变成新会话首进程(session header)
        •该进程成为一个新进程组的组长进程。
        •该进程没有控制终端,如果之前有,则会被中断
    组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程...

    3.僵死进程与孤儿进程
    僵尸进程:先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源)。消灭僵尸进程的唯一方法是终止其父进程。
    孤儿进程:该进程的父进程先于自身终止。其特点是PPID=1(init进程的ID)。一个孤儿进程可以自成孤儿进程组。
    孤儿进程组:
    定义1
    该组中的每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员
    定义2
    不是孤儿进程组的条件是,该组中有一个进程,其父进程属于同一会话的另一个组中。
    也就是说,将该父进程终止就能使该进程组成为孤儿进程(感谢网友”hello”的指正)。这个父进程通常是这个进程组的组长进程,因为只有它的父进程在这个进程组外,而其他进程(组长的子进程)的父进程都是组长进程的ID
    ————————————————
    版权声明:本文为CSDN博主「汤的Blog」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/tangli555/article/details/52027377

  • 相关阅读:
    web设计_6_图片/标题/说明文字布局
    web设计_5_自由的框式组件
    web设计_4_可扩展的行
    ubuntu下把python脚本转为二进制字节码文件
    Ubuntu与Window双系统安装的注意事项
    安装Windows和Ubuntu双系统2
    安装Windows和Ubuntu双系统
    Configuring and Running Django + Celery in Docker Containers
    ggplot绘图之基本语法
    R Multiple Plots
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/12110742.html
Copyright © 2011-2022 走看看