终端和进程组概念、会话

终端输入sleep 3000,和sleep 3000 &的区别
前者无法继续解析用户输入的命令,后者可以(sleep成为后台进程)

在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。
默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。
信号中还讲过,在控制终端输入一些特殊的控制键可以给前台进程发信号,例如Ctrl+C表示SIGINT,Ctrl+\表示SIGQUIT。
在这里插入图片描述

进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID为第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID为其进程ID
在这里插入图片描述
PPID:父进程ID
PID:当前进程ID
PGID:组长进程ID
SID:会话ID(会长比组长大)
TTY:终端(查看当前终端名字)
STAT:状态
COMMAND:命令

组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组生存期:进程组创建到最后一个进程离开(终止或转移到另一个进程组)。一个进程可以为自己或子进程设置进程组ID。

创建会话注意事项

  1. 调用进程不能是进程组组长,该进程变成新会话首进程(session header)

  2. 该调用进程是组长进程,则出错返回

  3. 该进程成为一个新进程组的组长进程

  4. 需有root权限(ubuntu不需要)

  5. 新会话丢弃原有的控制终端,该会话没有控制终端

  6. 建立新会话时,先调用fork, 父进程终止,子进程调用setsid

在这里插入图片描述
==注意:==组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值