以在shell中執(zhí)行程序為例子哮奇,介紹了進(jìn)程相關(guān)的概念:process group, controlling
terminals和session
process group(進(jìn)程組)
我們知道每個進(jìn)程有唯一的ID,除此之外,每個線程還屬于一個唯一的進(jìn)程組。
一個進(jìn)程組包含多個進(jìn)程鸥印,其中一個進(jìn)程被稱為進(jìn)程組領(lǐng)導(dǎo)(process group leader)
進(jìn)程組也有唯一的ID壶愤,這個id就等于領(lǐng)導(dǎo)進(jìn)程的ID
講進(jìn)程組的重要性質(zhì)前,先要講一下終端(terminal)的概念河狐。在有GUI界面前,我們
是通過終端和計算機交互瑟捣,鍵盤和鼠標(biāo)的輸入都通過終端傳遞個計算機馋艺。
進(jìn)程組的重要性質(zhì)是同一進(jìn)程組內(nèi)的進(jìn)程能夠接收來自同一個終端的信號。
session(進(jìn)程會話)和Controlling Terminal(控制終端)
多個進(jìn)程組成一個進(jìn)程組迈套,多個進(jìn)程組組成進(jìn)程會話(session)
創(chuàng)建會話的進(jìn)程自動成為進(jìn)程領(lǐng)導(dǎo)(session leader)
一個會話可以關(guān)聯(lián)一個控制終端(controlling terminal)捐祠,進(jìn)程領(lǐng)導(dǎo)將會話與控制終端
關(guān)聯(lián),進(jìn)程領(lǐng)導(dǎo)也被稱為控制進(jìn)程(controlling process)
如果一個會話關(guān)聯(lián)了一個控制終端交汤,那么會話內(nèi)的進(jìn)程組可以分為兩類:前臺進(jìn)程組和
后臺進(jìn)程組雏赦。
前臺進(jìn)程組只有一個,可以接收控制終端的輸入芙扎,并向終端輸出信息星岗。
其他進(jìn)程組都是后臺進(jìn)程組
例子(Linux下Bash shell環(huán)境)
- 一般情況下在bash下執(zhí)行程序
[song@miPad unix]$ ps -o pid,ppid,pgid,sid,tpgid,comm
PID PPID PGID SID TPGID COMMAND
207187 2286 207187 207187 334140 bash
331481 331480 331481 207187 334140 bash
334140 331481 334140 207187 334140 ps
ps
的父進(jìn)程是331481,但ps
是單獨的進(jìn)程組且為前臺進(jìn)程組,因為TPGID
等于334140
是ps
的進(jìn)程組id戒洼,剩下的兩個進(jìn)程組都是后臺進(jìn)程
- bash下執(zhí)行程序俏橘,且將應(yīng)用程序放入后臺執(zhí)行
ng@miPad unix]$ ps -o pid,ppid,pgid,sid,tpgid,comm&
[1] 334225
PID PPID PGID SID TPGID COMMAND
207187 2286 207187 207187 331481 bash
331481 331480 331481 207187 331481 bash
334225 331481 334225 207187 331481 ps
這一次,ps
仍然是單獨的進(jìn)程組圈浇,但已經(jīng)不是前臺進(jìn)程組了,前臺進(jìn)程組是bash
進(jìn)程組331481
- 包含管道的情況
[song@miPad unix]$ ps -o pid,ppid,pgid,sid,tpgid,comm | cat
PID PPID PGID SID TPGID COMMAND
207187 2286 207187 207187 334458 bash
331481 331480 331481 207187 334458 bash
334458 331481 334458 207187 334458 ps
334459 331481 334458 207187 334458 cat
ps
和cat
的父進(jìn)程都是bash
進(jìn)程寥掐,而且兩者同時屬于一個前臺進(jìn)程組