UNIX系统中的C语言作业控制详解
1. 文件与进程组基础
在每个进程中, /dev/tty 是与该进程关联的控制终端的同义词。对于那些无论输出如何重定向,都希望在终端上输出消息的程序来说,它非常有用。系统中的某些进程(通常是系统启动时启动的守护进程)会使用 ioctl 系统调用(操作常量为 TIOCNOTTY )来清除其控制终端。
在非伯克利版本的 UNIX 系统中,共享同一控制终端的一组进程被定义为一个进程组。在使用 sh 和旧的 tty 驱动程序的伯克利系统中,此定义仍然适用,但由于它们都不支持作业控制,因此不再进一步讨论。
在伯克利系统中,可以使用 setpgrp 系统调用将进程放入任意进程组。C shell( csh )以直接的方式使用此调用,每个 shell 作业构成一个单独的进程组。每次启动一个进程时, csh 会将该进程的进程组设置为与其进程 ID 相同的编号。对于管道,管道中的所有进程都被放入同一个进程组,即第一个派生进程的进程 ID(恰好是管道中的最后一个命令)。
每个终端都与一个称为“特殊进程组”的进程组相关联。处于特殊进程组中的进程被视为处于“前台”,允许从终端读取数据并接收键盘生成的中断。不在特殊进程组中的进程被视为处于“后台”,它们不能从终端读取数据,也不会接收键盘生成的中断。可以使用以下调用获取与终端关联的进程组:
ioct
超级会员免费看
订阅专栏 解锁全文
5455

被折叠的 条评论
为什么被折叠?



