Linux作業控制(前後臺)和守護程序

2021-08-21 01:11:18 字數 1291 閱讀 2714

之前學過父程序通過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 方法可以將指定的執行緒設定成後台...