深海的小鱼儿

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.进程的基本属性

        和进程基本相关的属性有:进程号(PID)、父进程号(PPID)、进程组号(PGID)系统的第一个进程是init进程,他的pid=1

2.获取进程属性的函数

        extern _pid_t getpid(void);获取本身进程的PID函数 extern _pid_t getppid(void);获取父进程的PID函数 extern _pid_t getpgid(_pid_t _pid);获取本进程的进程组的PID函数,此参数为0则为本进程的进程组的PID如果为其他的值,则返回值就是其他进程组的PID extern _pid_t getpgrp(void);获取当前进程的进程组号

3、简单程序测试:

code:

#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
    int i;
    printf("\tpid\t ppid \t pgid\n");
    printf("parent\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    for(i=0;i<2;i++)
        if(fork()==0)
            printf("child\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    return 0;
}

gcc –o getpid main.c

./getpid

2011-07-29-10-59 

在for循环里面开辟了3个进程循环了2次其中2999为整个进程的进程组的pid 2921为父进程就是上一级进程的pid

查询ps –aux 为bash也就是shell本身的进程

2011-07-29-11-59

4.加入一个现有的组或者是一个新的进程组成的系统调用函数setpgid()

   int setpgid(pid_t pid ,pid__t pgid);

    其中第一个参数是为你想修改进程PGID的进程PID,第二个为新的进程组号,如果这两个参数是相等的话。则由Pid指定的进程为进程组长;如果是pid为0,则修改当前进程的pgid,如果是pgid=0,则有指定的进程pid将用于进程组pgid

posted on 2011-07-29 11:17  深海的小鱼儿  阅读(469)  评论(0编辑  收藏  举报