1. --delimiter
    pgrep_进程组

     

     

  2. --list-name
    --list-full
    pgrep_命名空间_02

     

     

  3. --inverse
    pgrep_线程组_03

     

     

  4. --count
    pgrep_线程组_04

     

     

  5. --full
    pgrep_命名空间_05

     

     

  6.  

    --pgroup pgid       根据 pgid筛选
    pgrep_线程组_06

     

     pgrep_技术_07

     

     

  7.  

    --group 依据 进程 real group ,即进程的 real group id筛选
    pgrep_线程组_08

     

     pgrep_技术_09

     

     

  8. --euid           match by effective id
    pgrep_命名空间_10

     

     pgrep_进程组_11

     

     

  9.  

    --uid          match by real id   
    pgrep_线程组_12

     

     pgrep_线程组_13

     

     

  10. --session       match session id
    pgrep_技术_14

     

     pgrep_进程组_15

     

     

  11.  --newest  --oldest
    pgrep_进程组_16

     

     

  12. --terminal        match by controlling terminal
    pgrep_线程组_17


     

     

  13. --exact
    pgrep_线程组_18

     

     pgrep_命名空间_19

     

     pgrep_命名空间_20

     

     

  14.  

    ---parent
    pgrep_技术_21

     

     

  15.   namespace

    pgrep_技术_22

     

     

    pgrep_命名空间_23

     

     一个进程实体对应一个task_struct结构体


    PID:用于唯一标记一个进程

    这句话在以前是完全无误的,但是现在还必须加上一个条件,那就是在一个命名空间内唯一标记一个进程。关于命令空间,下一个章节会有介绍

    TGID:线程组ID

    一个进程可能包含多个线程,组成一个线程组,线程组内所有的线程的TGID都等于组长的PID。

    PGID:进程组ID。

    多个进程可以组成一个进程组,一个进程组内所有进程的PGID都等于组长的PID。

    SID:几个进程组可以组成一个会话组,会话组内所有的进程都有相同的SID。

    上图是3级namespace,上级和下级之间是父子关系。关于namespace有两点十分关键:

    各个namespace之间的是相互隔离的,也就是说PID可以重复。如上图各个namespace都有PID为1的进程。

    在下级namespace中创建的进程,在上级namespace中是可见的。如上图在level2 namespace中创建了进程PID=1,该进程在level 1 namespace中被映射为PID=3的进程,在level0 namespace中被映射为PID=5的进程。