进程组 会话 作业

一、进程组、作业、会话
1.进程组(process group)
     每个进程除了有一个进程ID(保存在PCB当中),还属于一个进程组。进程组由一个或多个进程组成,通常和一个作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。
     每个进程组都有一个组长进程,组长进程的ID等于组ID。
     组长进程可以组建一个进程组。只要进程组中有一个进程存在,这个进程组就存在。
2.作业(job)
      当命令行上运行一个进程时,就会变成一个作业,这个作业可能是一个进程,也可能是多个进程。
     shall有且只能运行一个前台作业,当前台有作业时,就不会运行其他作业,shell在后台运行(此时不能接收指令),当作业终止,shall被提到前台,可以接收指令
     shell分前后台来控制的不是进程而是作业或者进程组。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成。shell可以运行一个前台作业和任意多个后台作业。(作业控制)
     *作业和进程组区别:如果作业中某个进程又创建子进程(fork),则子进程不属于作业,属于进程组。一旦前台作业运行结束,shell就把自己提到前台,若原来前台进程还在(子进程还没终止 ),则自动变为后台进程组
3.会话(session )
     会话是一个或多个进程组的集合。一个会话可以有一个控制终端。建立与控制终端连接的会话首进程被称为控制进程(一般bash就是控制进程)。一个会话中几个进程组可被分为一个前台进程组和一个或多个后台进程组。
     一个会话中,应该包括控制进程(会话首进程)、一个前台进程组和任意后台进程组。
     ctrl+c(SIGINT信号),ctrl+\(SIGQUOT),ctrl+Z(SIGTSTP)内核发送相应的信号给前台进程组中所有进程。
     切换用户就是当前会话首进程起新进程组,每次su会加载新bash,每次打开终端也会新起一个bash

二、终端
1.基本概念
     用户通过登录系统后获得一个shell进程,这个终端称为shell进程的控制终端,控制终端是保存在PCB中的信息。fork时会复制PCB中的信息,所以由shell进程启动的其他进程的控制终端也是这个终端。默认情况下(未重定向)每个进程的标准输入、标准输出和标准作物都指向控制终端。在控制终端输入一些特殊的控制键可给前台进程发送信号(ctrl+c 、ctrl+Z等)
     每个进程都可通过一个特殊的设备文件/dev/tty访问控制终端
例:
     1.一个进程要访问它的控制终端可以通过dev/tty也可以通过该终端设备对应的设备文件来访问
     2.ttyname函数可由文件描述符查看对应文件名。该文件描述符必须指向一个终端设备而不是任意文件。


2.终端的登陆
     一个pc通常只有一套键盘和显示其,也就是只有一套终端设备,但可以通过Ctrl+Alt+F1~F6 切换到6个字符终端,相当于有6套虚拟终端设备,它们共同用一套物理终端设备,对应的设备文件为/dev/tty1~/dev/tty6
     登陆过程:
     1.系统启动,init进程根据配置文件确定打开那些终端
     2.getty根据命令行参数打开终端设备作为它的控制终端,把文件描述符0、1、2指向控制终端,然后提示用户输入账号,当用户账号输后,getty任务完成。
     3.lofin程序提示用户输入密码(输入密码期间关闭终端回显),然后验证账号密码的正确性。若密码错误,login进程终止,init重新fork/exec一个getty,继续步骤2;若正确,login设置一些环境变量,设置当前工作目录为该用户主目录,然后执行shell
     4.execl函数启动bash,在bash前加“-”表示bash作为shell启动,执行shell脚本

*getty->exec->login->execl->bash

.Session与进程组
     shell可以同时运行一个 作业/进程组 和任意多个后台 作业/进程组,这称为作业控制。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成。
例:
     启动5个进程:
      $proc1 | proc2 &
     $proc3 | proc4 | proc5
     其中:1.proc1和proc2属于同一个后台进程组(&表示后台运行),proc3、proc4、proc5属于同一个前台进程组。shell进程属于一个单独的进程组。
               2.这些进程控制终端相同,属于同一个session。
               3.当用户在控制终端输入特殊的控制键(ctrl+c等),内核发送相应的信号给 前台进程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值