1.程序組
每個程序組有
乙個唯一的程序組id,就跟程序有自己唯一的乙個程序id一樣。每個程序除了有自己的程序id外,還會屬於乙個程序組,乙個或多個程序的集合稱為乙個程序組。它們與同一作業作業相關聯。
只要程序組中有乙個程序存在,那麼這個程序組就是存在的(之前說過乙個程序也能稱為乙個程序組)
2.作業
shell分前後台來控制的不是程序
而是作業或者程序組
。乙個前台作業可以由多個程序組成,
乙個後台也可以由多個程序組成,shell可以執行乙個前台程式和多個後台程式。(下面來舉個例子,來驗證一下)
我們fork乙個子程序,然後兩秒後父程序退出,看結果。
一旦執行我們立馬按住ctrl+c,可以看到子程式立馬停了下來,按ctrl+c相當於給前台發了乙個訊號,程式能停下來說明此時該子程序還是在前台的。然後再執行一次,稍微等上一會兒再去按ctrl+c的時候,並沒有任何反應,程式一直死迴圈列印輸出的結果,在子程序執行的同時,父程序sleep的時間到了,父程序就退出了,那麼該子程序就變成了孤兒程序,它不是乙個作業,此時shell回到前台,把該孤兒程序擠到後台,所以當我們在象前台發訊號的時候,就不能控制這個已經去了後台的孤兒程序,這是想要殺掉這個程序就只能使用kill指令。
此時我們首先需要使用命令ps aux來顯示所有作業及程序組資訊(或者ps axj),然後找到檔案所對應的程序號使用kill 9 +程序號去殺掉這個程序。
為了看我們的tem.c是不是不在了,再一次ps aux
此時看到tem.c不在了,我們的輸出也停下來了,可見我們成功的殺了那個孤兒程序。
作業與程序組的區別:如果作業中的某個程序又建立了
子程序,則 該子程序不屬於作業。
一旦作業運
行結束,shell就把
自己提到前台,如果原來的前台程序還存在(如果這個
子程序還沒終
止),它
自動變為後台程序組。
3.作業控制
首先我們起乙個後台命令./可執行檔名 &
這裡的1是作業號 2728是程序pid,接下來用jobs檢視後台作業
fg 1 命令把後台作業放到前台,bg 1把作業從前台放到後台。1是作業號。
4.會話
會話是乙個或多個程序組的集合(注意與程序組概念進行區分)。每乙個會話有乙個控制終端,我們每開乙個終端就會多乙個會話(bash)。
此時我們有乙個會話,所以有乙個bash,我們此時再開乙個終端觀察結果
此時我們就看到了兩個會話(bash)
乙個會話中的
幾個程序組可被分為
乙個前台程序組以及
乙個或多個後台程序組。所以
乙個會話中,應該包括控制程序(會話
首程序),
乙個前台程序組和任意後台程序組。
Linux 程序組 作業 會話
我們在利用指令檢視程序資訊的表頭 其中ppid與pid是父程序id與子程序id,而這裡有個pgid是什麼呢?我們在談論執行緒的時候,說過執行緒有乙個執行緒組,而執行緒組id就是這個執行緒主線程的id。也是這個執行緒所組成程序的程序pid。而程序也是有程序組的,這裡的這個pgid就是程序組id,每個程...
程序間關係 程序組 作業 會話
程序組 之前我們在檢視系統程序相關資訊時,會看到每乙個程序的id和其父程序的id等相關資訊,其中就有乙個pgid,代表的是組id。什麼是組id呢?程序除了有自己的乙個程序id之外,每乙個程序還屬於乙個程序組。而這其中的pgid就是組id,指明了該程序是屬於哪乙個程序組。那麼什麼是程序組呢?其實這個程...
程序 程序組 會話
1.程序組 每個程序屬於乙個程序組,程序組是乙個或多個程序的集合,每個程序有乙個唯一的程序組id。獲取程序組的兩個函式 include pid t getpgrp void pid t getpgrp pid t pid 程序組可以有乙個組長程序,組長程序的標識是,其程序組id等於其程序id。程序組...