进程组和会话

7 篇文章 0 订阅
1 篇文章 0 订阅

进程组是若干个进程的集合,每个进程组都有一个组长,不管组长终止与否,只要有进程运行

进程组就存在,组长的pid就是getpgrp()。

会话是进程组的集合,包含多个进程组,但是只有一个前台进程组。

进程调用setsid可以建立新对话期,成功调用返回进程组id,出错返回-1,调用函数的进程如果不是组长,

则此函数创建一个新的会话期。

1.此进程称为新的会话的首进程,也是目前唯一一个进程。

2.成为新进程组的组长进程

3.此进程没有控制终端(每个会话都有一个控制终端),如果之前有,也要接触联系。

会话和进程组特性:

1.一个会话又一个控制终端,通常是我们登录的终端设备。

2.与控制终端连接的会话首进程,被称为控制进程。

3.一个会话可以分为一个前台进程组,或一个或多个后台进程组。

4.delete 或者crtl+c会造成将中断信号或者退出信号送到前台进程组的所有进程。

//
//  main.cpp
//  pid_7
//
//  Created by 蓝猫 on 2018/11/3.
//  Copyright © 2018年 蓝猫. All rights reserved.
//

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
using namespace std;
/*
 进程组是若干个进程的集合,每个进程组都有一个组长,不管组长终止与否,只要有进程运行
 进程组就存在,组长的pid就是getpgrp()。
 */
void fun1()
{
    pid_t pid;
    pid=fork();
    if(pid<0)
    {
        perror("fork error \n");
        exit(1);
    }
    else if(pid==0)
    {
        cout<<"子进程:"<<getpid()<<" 进程组号:"<<getpgrp()<<endl;
        pid_t group=getpgrp();
        pid_t pid2=fork();
        if(pid2==0)
        {
            if(setpgid(getpid(), group)==0)
            {
                 cout<<"孙子进程:"<<getpid()<<" 成功加入进程组,进程组号:"<<getpgrp()<<endl;
            }
           
        }
        exit(0);
    }
    else
    {
        //wait(NULL);
        cout<<"父进程:"<<getpid()<<" 进程组号:"<<getpgrp()<<endl;
        exit(0);
    }

}
/*
 会话是进程组的集合,包含多个进程组,但是只有一个前台进程组。
 进程调用setsid可以建立新对话期,成功调用返回进程组id,出错返回-1,调用函数的进程如果不是组长,
 则此函数创建一个新的会话期。
 1.此进程称为新的会话的首进程,也是目前唯一一个进程。
 2.成为新进程组的组长进程
 3.此进程没有控制终端(每个会话都有一个控制终端),如果之前有,也要接触联系。
 会话和进程组特性:
 1.一个会话又一个控制终端,通常是我们登录的终端设备。
 2.与控制终端连接的会话首进程,被称为控制进程。
 3.一个会话可以分为一个前台进程组,或一个或多个后台进程组。
 4.delete 或者crtl+c会造成将中断信号或者退出信号送到前台进程组的所有进程。
 
 */
void fun2()
{
    pid_t pid;
    pid=fork();
    if(pid==0)
    {
        pid_t pid2;
        pid2=setsid();
        cout<<"建立新的会话,进程组ID:"<<pid2<<" 当前进程:"<<getpid()<<endl;
    }
}
int main(int argc, const char * argv[])
{
        fun1();
        return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值