本文主要是介绍《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应该是相同的。
这篇关于《UNIX环境高级编程》笔记--作业控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!