第7章 进程关系(4)_前台进程组

4. 前台进程组

(1)前台进程组

第7章 进程关系(4)_前台进程组 

  ①自动接受终端信号的组称为前台进程组

  ②在终端通过ctrl+c等动作产生的信号首先被前台进程组接受。

  ③在shell启动的若干个进程组默认是父进程所在的组为前台进程组,其他进程组则为后台进程组

  ④除非是默认,否则都要通过调度才能成为前台进程组

(2)获取/设置前台进程组ID

头文件

#include <unistd.h>

函数

pid_t tcgetpgrp(int fd);  //获取前台进程组ID,出错返回-1

int tcsetpgrp(int fd, pid_t pgrpid); //设置前台进程组ID,成功返回0,出错返回-1

功能

获取或设置前台进程组ID

参数

fd:必须引用该会话的控制终端0代表当前正在使用的终端

【编程实验】设置前台进程组

第7章 进程关系(4)_前台进程组 

//process_foregroup.c

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

//测试前台进程组
//分为前台进程组和后台进程组,按ctrl+c时前台进程组将被kill。
int main(void)
{
    pid_t group1, group2;
    //创建进程组1,父进程作为组长进程
    setpgid(getpid(), getpid());
    group1 = getpgid(getpid());

    pid_t pid;
    int i = 0;

    for(; i< 3; i++){
        pid = fork();
        if(pid < 0){
            perror("fork error");
            exit(1);
        }else if(pid > 0){ //parent process
            if(i == 0 ){
                 //创建进程组2
                 setpgid(pid, pid);
                 group2 = getpgid(pid);
                 //将group2设置为前台进程组
                 tcsetpgrp(0, group2);
            }
            if(i == 1){
                //将第2个子进程加入到group2
                setpgid(pid, group2);
            }
            if(i == 2){
                //第3个子进程加入group1
                setpgid(pid, group1);
            }
        }else{ //child process
            if(i == 0){
                 //创建进程组2
                 setpgid(getpid(), getpid());
                 group2 = getpgid(getpid());
                 //将group2设置为前台进程组
                 tcsetpgrp(0, group2);
            }
            if(i == 1){
                //将第2个子进程加入到group2
                setpgid(getpid(), group2);
            }
            if(i == 2){
                //第3个子进程加入group1
                setpgid(getpid(), group1);
            }

            break;  //进程扇,子进程须退出
        }
    }

    printf("pid: %d, ppid: %d, pgid: %dn",
            getpid(), getppid(), getpgid(0));

    pause();

    return 0;
}

原文链接: https://www.cnblogs.com/5iedu/p/6358941.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    第7章 进程关系(4)_前台进程组

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/393631

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月3日 下午3:17
下一篇 2023年4月3日 下午3:17

相关推荐