一、進程組(PGID)
1.進程組是一個或多個進程的集合,它們與同一作業相關聯,可以接收來自同一中端的各種信號;
2.每個進程都屬於一個進程組;
3.多個毫不相關的進程可能共同協作完成同一個作業;
4.組長進程:每個進程組有一個組長進程,它是該組的第一個進程,組長進程的ID等於進程組的ID;
5.一個進程組中,只要有一個進程存在,這個進程組就存在,它與組長沒有關係,只是用了組長進程的PID作爲該進程組的PGID;
二、作業
1.Shell分前臺後臺控制的是作業或者進程組,而不是進程,此時,可以把作業和進程組都當做作業處理;
2.一個前臺作業或後臺作業都可以由多個進程組成,如下圖所示;
3.作業控制:Shell可以運行一個前臺作業或多個後臺作業;
4.作業和進程組的區別:如果作業中的某個進程右創建了子進程,該子進程屬於進程組,不屬於作業;
5.前臺作業幾首用戶的輸入指令,由前臺獲取;
6.ctrl+c 暫停或終止前臺作業,前臺作業又包含多個進程,所以終止了多個進程;
三、會話(SID)
1.一次會話由多個進程組組成,一個會話可以有一個控制終端;
2.一個會話中的進程可由一個前臺進程組和一個或多個後臺進程組組成;
3.控制進程;建立與控制終端連接的會話首進程;
4.一個會話應該包括控制進程、一個前臺進程組,一個或多個後臺進程組三部分;
5.一個進程組的會話SID一般爲父進程的ID,即PPID,它們的父進程屬於當前進程的bash;
6.第一個與終端產生會話的進程爲bash,bash通常作爲控制進程使用,新打開一個終端時,會產生一個新的bash,形成新的對話;
7.bash本身就是一項作業,自成進程組,它的PID,PGID,SID相同;
如圖所示: