linux的 0號程序 和 1 號程序
z(zombie)-殭屍程序
思考題孤兒程序
守護程序/精靈程序:
程序狀態:就緒/執行/阻塞
程序狀態檢視
ps axj / ps aux 命令
一般用第乙個
檢視最多建立程序數量
ulimit -a
-u: processes 1392
我的mac最多建立1392個
linux下有3個特殊的程序,idle程序(pid = 0), init程序(pid = 1)和kthreadd(pid = 2)
idle程序其pid=0,其前身是系統建立的第乙個程序,也是唯一乙個沒有通過fork或者kernel_thread產生的程序。完成載入系統後,演變為程序排程、交換
由0程序建立,完成系統的初始化. 是系統中所有其它使用者程序的祖先程序。
linux中的所有程序都是有init程序建立並執行的。首先linux核心啟動,然後在使用者空間中啟動init程序,再啟動其他系統程序。在系統啟動完成完成後,init將變為守護程序監視系統其他程序。
它的任務就是管理和排程其他核心執行緒kernel_thread, 會迴圈執行乙個kthread的函式,該函式的作用就是執行kthread_create_list全域性鍊錶中維護的kthread, 當我們呼叫kernel_thread建立的核心執行緒會被加入到此鍊錶中,因此所有的核心執行緒都是直接或者間接的以kthreadd為父程序
處於僵死態的程序(程序已經退出,但是資源沒有完全釋放)
殭屍程序的產生原因:
殭屍程序的危害
資源洩露:乙個使用者所能建立的程序數量是有限的,並且資源沒有完全**會佔據記憶體資源
處理方法:
程序等待(父程序等待子程序退出,獲取退出返回值,釋放子程序資源)
退出父程序 (父程序退出,子程序儲存退出原因就沒有意義了因此也就被釋放了)
子程序儲存自身的退出原因,怎麼儲存,用什麼形式儲存?
(在自身上儲存)程序就是pcb,程序的退出原因實際上是在pcb裡面儲存,以資料的形式來儲存
殭屍程序資源洩漏,這個資源是指什麼?
乙個是程序的數量資源,乙個是程序本身所佔的記憶體資源
為什麼要建立乙個子程序?
子程序幹的事情跟父程序是一樣的,建立子程序可以分攤父程序的工作,提高效率
父程序先於子程序退出,子程序則成為孤兒程序,執行在系統後台,並且這個孤兒程序的父程序成為1號程序(init程序)。
孤兒程序是不會成為殭屍程序的,因為1號程序隨時關注子程序的退出。(特殊的孤兒程序,脫離終端,會話影響。執行在後台)
#include
#include
#include
intmain()
else
if(id ==0)
else
return0;
}
mac終端下程序圖:
是一種特殊的孤兒程序,父程序是1號程序,執行在後台,與終端以及登陸會話脫離關係,不再受影響。
守護程序通常是一種執行在系統後台的批處理程式(默默的做一些迴圈往復的事情)
知識點習題
關於子程序和父程序的說法,下面哪乙個是正確的?()
a. 乙個父程序可以建立若干個子程序,乙個子程序可以從屬於若干個父程序
b. 父程序被撤銷時,其所有子程序也被相應撤消
c. 子程序被撤銷時,其從屬的父程序也被撤銷
d. 乙個程序可以沒有父程序或子程序
正確答案:d
答案解析:
1、孤兒程序
如果父程序先退出,子程序還沒退出那麼子程序將被託孤給init程序,這是子程序的父程序就是init程序(1號程序)
init程序沒有父程序.(因為它就不是通過fork的方式產生的)
2、殭屍程序
程序終止後進入僵死狀態(zombie),等待告知父程序自己終止,後才能完全消失.但是如果乙個程序已經終止了,但是其父程序還沒有獲取其狀態,那麼這個程序就稱之為殭屍程序.殭屍程序還會消耗一定的系統資源,並且還保留一些概要資訊供父程序查詢子程序的狀態可以提供父程序想要的資訊.一旦父程序得到想要的資訊,殭屍程序就會結束.
下列關於程序和執行緒的描述,正確的是:
a. 程序不能直接從執行態到就緒態
b. 同一程序的執行緒可以資源共享
c. 同一程序的執行緒共享棧段
d. 程序是 cpu 排程的基本單位
正確答案:ab
答案解析:程序是分配資源的基本單位。
執行緒池都有哪些狀態
running 這是最正常的狀態,接受新的任務,處理等待佇列中的任務。執行緒池的初始化狀態是 running。執行緒池被一旦被建立,就處於 running 狀態,並且執行緒池中的任務數為 0。shutdown 不接受新的任務提交,但是會繼續處理等待佇列中的任務。呼叫執行緒池的 shutdown 方法...
Linux 程序之間通訊都有哪些方式
通訊手段 簡介管道 pipe 即有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊 訊號 signal 訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程...
C都有哪些標準?都有哪些主要變化?
程式設計前先查一下編譯器都支援哪些標準?1?c的標準化過程 c語言自誕生到現在,期間經歷了多次標準化過程,主要分成以下幾個階段 1.1?traditional?c 此時的c語言還沒有標準化,來自 c programming language,first edition,by brian w.kern...