為什麼核心設計人員要給程序創造一種殭屍狀態?

2021-08-07 19:54:15 字數 1030 閱讀 5159

大家都知道,子程序在終止之後,會使得核心產生sigchld訊號遞送給父程序

此時我們在網路程式設計中必須做到的(以下來自unix網路程式設計卷1)

(1)當fork子程序時,必須捕獲sigchld訊號

(2)當捕獲訊號時,必須處理被中斷的系統呼叫

(3)sigchld的訊號處理函式必須被正確編寫,使用waitpid函式以免使得留下殭屍程序

看到上述資料時,我就在想,什麼是殭屍程序呢?

於是有了接下來這段話

乙個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序。

那麼我又產生了問題,核心開發人員是不是閒得慌,子程序exit()後直接銷毀不就好了,為什麼還要為程序設定一種殭屍狀態(task_zombie)?

答案:  給程序設定殭屍狀態的目的是維護子程序的資訊,以便父程序在以後某個時間獲取。這些資訊包括子程序的程序id、終止狀態以及資源利用資訊(cpu時間,記憶體使用量等等)。如果乙個程序終止,而該程序有子程序處於殭屍狀態,那麼它的所有殭屍子程序的父程序id將被重置為1(init程序)。繼承這些子程序的init程序將清理它們(init程序將wait它們,從而去除殭屍狀態)。

「給程序設定殭屍狀態的目的是維護子程序的資訊,以便父程序在以後某個時間獲取」這句話的具體例項:

比如:程序建立乙個子程序來執行特定的任務,當子程序終止時,父程序捕獲sigchld訊號來知道子程序已經終止,但這個任務到底有沒有完成,如果我們不對子程序維護一些必要資訊的話,就無從知曉,故核心開發人員設計了一種殭屍狀態(其中維護了子程序id,子程序終止狀態、資源利用資訊等)來等待父程序的青睞,父程序得到想要的資訊之後再告訴核心你可以**子程序的id及其殘餘資訊,子程序得以真正的銷毀了。

注意,殭屍程序也是一種程序,其還是會占用pid,而pid是一種很珍貴的資源,如果父程序不能及時呼叫wait類函式處理,其會一直占用,最終可能導致我們耗盡程序資源

互動設計人員什麼階段介入

請問,互動設計人員什麼階段介入比較適合呢?不是階段,是工作流。互動設計屬於設計工作流的一部分,輸入是分析的邊界類。但現實中,很多 互動設計 實際上是由需求人員兼任,所以也可以看到 互動設計師 負責需求工作流。還有乙個問題,從邊界類 可能來自不同的用例 到互動設計的成果 這裡指最終呈現在涉眾面前的系統...

Clickhouse 設計人員須知

clickhouse提供了很多效能優化的知識,下面介紹clickhouse designer需要知道的技巧,這樣很有利於效能的提公升。1.使用字段編碼減少資料大小 2.使用物化檢視尋找最新的資料 3.使用陣列儲存鍵值對 4.使用物化列預計算值 5.使用資料字典替換維度表join 6.使用ttl刪除過...

四類設計人員

個人覺得設計人員可以分為四種型別 模組設計人員 框架設計人員 專業領域設計人員 系統設計人員,這四種型別的設計人員並沒有什麼絕對的誰強誰弱,只能說各有千秋吧,但一定程度上來講,四種型別之間還是存在著一些關聯,來看看這四類設計人員的專注點和關聯吧 1 模組設計人員 模組設計人員更加專注於模組的詳細設計...