《UNIX环境高级编程》笔记--作业控制

作业控制允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端,以及哪些作业在后台运行,作业

控制要求下面三种形式的支持:

1.支持作业控制的shell。

2.内核中的终端驱动程序必须支持作业控制。

3.内核必须提供对某些作业控制信号的支持。


我们可以键入一些特殊字符来影响前台作业:

1.中断字符(ctrl+c)产生SIGINT。

2.退出字符(ctrl+\)产生SIGQUIT。

3.挂起字符(ctrl+z)产生SIGTSTP。

键入这些字符后将信号SIGTSTP送至前台进程组中的所有进程,后台进程组不受影响。

终端驱动程序必须处理与作业控制有关的另一种情况。我们可以有一个前台作业和若干个后台作业,这些作业中哪一个接受我们

在终端上键入的字符呢?只有前台作业接受终端输入。如果后台作业试图读终端,那么这并不是一个错误,但是驱动程序将检测

到这种情况,并且向后台作业发送一个特定信号SIGTTIN。该信号通常会暂停此后台作业,shell则向有关用户发出这种情况的通

知,然后用户就可用shell命令将此作业转为前台作业运行,于是它就可以读终端了:

yan@yan-vm:~/apue$ cat > a.txt &
[1] 8563
yan@yan-vm:~/apue$
[1]+  Stopped                 cat > a.txt
yan@yan-vm:~/apue$ jobs
[1]+  Stopped                 cat > a.txt
yan@yan-vm:~/apue$ fg %1
cat > a.txt
123
yan@yan-vm:~/apue$ cat a.txt
123


在一个有作业控制的shell中执行如下命令:

yan@yan-vm:~/apue$ ps -o pid,ppid,pgid,sid,comm | cat
  PID  PPID  PGID   SID COMMAND
 8450  8449  8450  8450 bash
 8601  8450  8601  8450 ps
 8602  8450  8601  8450 cat

bash,ps和cat在同一session,ps和cat作为前台进程组而存在,如果是没有作业控制的shell,这三个进程的进程组ID应该是相同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值