没有一个完全普遍的方法来做这个。虽然你可以通过处理‘ps’的输出确定进 程间的相互关系,但因为它只表示系统的一瞬间的状态(snapshot)所以并不可靠。
但是,如果你启动一个子进程,而它可能生成它自己的子进程,而你意图一次杀 死整个生成的事务(job),解决方法是将最先启动的子进程置于一个新的进程组, 当你需要时杀死整个进程组。
建议为创建进程组而使用的函数是‘setpgid()’。在可能情况下,使用这个函数 而不使用‘setpgrp()’,因为后一个在不同系统中有所不同(在一些系统上‘setgrp();’ 等同于‘setpgid(0,0);’,在其它系统上,‘setpgrp()’和‘setpgid()’相同)。 参见范例章节的事务-控制范例程序。
放置一个子进程于其自身的进程组有一些影响。特别的,除非你显式地将该进程 组放置于前台,它将被认为是一个后台事务并具有以下结果:
试图从终端读取的进程将被‘SIGTTIN’信号暂停。
如果设置终端模式‘tostop’,那么试图向终端写的进程将被‘SIGTTOU’ 信号暂停。(试图改变终端模式也导致这个结果,且不管当前‘tostop’是否设置)
子进程将不会收到从终端发出的键盘信号(比如‘SIGINT’或‘SIGQUIT’)
在很多应用程序中输入和输出总会被重定向,所以最显著的影响将是丧失键盘 信号。父进程需要安排程序起码捕获‘SIGINIT’和‘SIGQUIT’(可能情况下, 还有‘SIGTERM’),并在需要情况下清除后台事务。