之前學過父程序通過fork建立子程序,其實還有一種程序間關係是程序組。
程序組可以接受同一終端的各種訊號,比如ctr+c就是給乙個程序組發的中斷訊號而不是個單個程序,所以說程序組通常和乙個作業相關聯。
組長程序可以建立程序組,但是組內只要有程序就一直存在。
例如在shell介面下用兩個管道執行三個命令,就要在shell程序下fork三個子程序,這三個子程序同屬乙個程序組,為了完成一項作業。
作業
shell分前後台來控制的是作業或者程序組。可以同時執行乙個前台作業和多個後台作業。一旦作業完成,shell講自己提到前台執行,如果作業的子程序還沒結束,但是已經不屬於作業並在後台執行。
前台和後台作業的區別?前台作業占用了shell,在程式執行期間不能執行命令。後台作業則不能從標準輸入讀取資料。
會話
session是比作業更高層的抽象,乙個會話包括乙個會話首程序,乙個前台程序組和任意個後台程序組。
sid欄位標識乙個會話,bash通常是會話首程序,也是其他程序的父程序。
作業控制操作
./xx &
以後臺方式執行可執行程式
jobs
檢視作業
fg 1
提到前台執行
ctr + z
提到後台執行
bg 1
配合jobs,讓後台暫停的程序執行
理解訊號的遞達之前說過程序收到訊號先修改pcb的pending表,然後主控制流程收到訊號產生中斷切換到核心態,之後在切換回使用者態之前才檢查pending表是否有未處理的訊號。
這裡前提條件是主控制流程在執行著,而在後台掛起狀態的程序只能收到訊號卻不能產生中斷並遞達訊號。
守護程序有自己程序組和session,不受使用者登入登出影響。
往往在系統開啟時自啟動,系統關閉時終止,絕大部分伺服器都是守護程序實現。
系統的1號程序init就是守護程序,父程序id為0通常是核心程序,負責啟動各層次的服務程序。
建立步驟
設定umask為0,守護程序建立的檔案不受繼承的許可權影響
fork,父程序exit,子程序繼承父程序組id,但是組長程序(父程序)已經退出了
setsid,建立新會話,使呼叫的程序稱為會話首程序
更改工作目錄為 ,不繼承原先的目錄
關閉所有檔案描述符
Linux 前後臺程序切換
linux 前後臺程序切換 當你用shell啟動乙個程式時,往往他是在前台工作的。例如經常用putty連線到遠端伺服器執行指令碼的時候,如果本地網路中斷後,這個時候前台程序就結束了,比較的懊惱,必須重新執行。因此有必要進行前後臺程序的切換。例如直接在終端裡輸入firefox,那麼會開啟firefox...
linux前後臺程序切換
linux 前後臺程序切換 當你用shell啟動乙個程式時,往往他是在前台工作的。例如經常用putty連線到遠端伺服器執行指令碼的時候,如果本地網路中斷後,這個時候前台程序就結束了,比較的懊惱,必須重新執行。因此有必要進行前後臺程序的切換。例如直接在終端裡輸入firefox,那麼會開啟firefox...
08 控制線程 後台執行緒(守護執行緒)
後台執行緒 後台執行緒 daemon thread 執行在後台,他的任務是為其它的執行緒提供服務,又稱為 守護執行緒 jvm的垃圾 執行緒就是典型的後台執行緒。特徵 如果所有的前台執行緒都死亡,後台執行緒會自動死亡。呼叫thread物件的setdaemon true 方法可以將指定的執行緒設定成後台...