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
在for循环里面开辟了3个进程循环了2次其中2999为整个进程的进程组的pid 2921为父进程就是上一级进程的pid
查询ps –aux 为bash也就是shell本身的进程
4.加入一个现有的组或者是一个新的进程组成的系统调用函数setpgid()
int setpgid(pid_t pid ,pid__t pgid);
其中第一个参数是为你想修改进程PGID的进程PID,第二个为新的进程组号,如果这两个参数是相等的话。则由Pid指定的进程为进程组长;如果是pid为0,则修改当前进程的pgid,如果是pgid=0,则有指定的进程pid将用于进程组pgid