欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unix环境高级编程笔记:9、进程关系

程序员文章站 2022-03-02 15:57:25
...
1、进程组
    #include <unistd.h>
    pid_t getpgrp(void);    返回值:调用进程的进程组ID
 
    每个进程组都可以有一个组长进程。组长进程标识是,其进程组ID等于其进程ID
    组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与进程组长进程是否终止无关。    
 
  #include <unistd.h>
 int setpgid(pid_t pid,pid_t pgid);
setpgid函数将pid进程的进程组ID设置为pgid。如果这二个参数相等,则由pid指定的进程变成进程组组长。
如果pid是0,则使用调用者的进程ID
 
在大多数作业控制shell中,在fork之后调用此函数,使父进程设置其子进程的进程组ID,并且使子进程设置自己的进程组ID。
这二个调用中有一个是冗余的,但让父子进程都这么做可以保证,在父、子进程认为子进程已进入了该进程组时,这确实已经发生。
 
waitpid函数则可以用来等待一个进程或者指定进程组中的一个进程终止。
 
 
2、会话
    会话是一个或多个进程组的集合。
 
    shell的管理线将几个进程编成一组。
    proc1 | proc2 &
    proc3 | proc4  |proc5
 
    进程调用setsid函数建立一个新会话
#include <unistd.h>
pid_t setsid(void);
#include <unistd.h>
pid_t getsid(pid_t pid);
 
 
3、孤独进程组
    一个其父进程已经终止的进程称为孤独进程,这种进程由init进程收养。