setpgid函数改变进程所属组
getpgid函数获取当前进程组
详见代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<signal.h>
void child_change(int signo)
{
printf("------child group ID changed to %d\n",getpgid(0));
exit(1);
}
int main(void)
{
pid_t pid;
if((pid=fork())<0)
{
perror("fork");
exit(1);
}
else if(pid==0)
{
printf("child ID = %d \n",getpid());
printf("child group ID =%d\n",getpgid(0));//获取进程组ID
//printf("child group ID =%d\n",getpgrp()); 等同上面
signal(SIGUSR1,child_change);
while(1);
}
else if(pid>0)
{
sleep(2);
setpgid(pid,pid);//改变子进程所属组
kill(pid,SIGUSR1);
sleep(2);
printf("\n");
printf("parent pid=%d\n",getpid());
printf("parent's parent pid = %d\n",getppid());
printf("parent group ID=%d\n",getpgid(0));
sleep(1);
setpgid(getpid(),getppid());//改变父进程组为爷爷组
printf("\n-------group ID of parent is changed to %d\n",getpgid(0));
while(1);
}
}