Linux中進程具有父子層次結構,Windows中沒有進程層次,這兩種設計各有什麼優劣?

問題補充:

這個是《現代操作系統》2.1.4節的內容,不太理解紅框內的文字所以有上述疑問。

「地位相同」是什麼意思?


Windows有進程樹,至少Win2000以後肯定都有,Win2000之前不清楚,用process explorer就可以查看進程樹:

你引用的這個說法不太正確,但也不是說完全錯。

Windows維護一個進程層次的圖表,但這個層次不是一個關係較強的父子鏈。

舉個離子:開始-&>運行,啟動一個命令行窗口,該任務屬於explorer的子進程,在這個窗口裡敲start命令再啟動一個命令行窗口,這個進程屬於上一個命令行窗口的子進程。

然後把第一個窗口關了,那麼第二個命令行窗口就沒有父進程了。

如果非要講區別,應該說:Windows結束父進程不會導致子進程結束,父子進程之間關聯度非常小,Linux中有各種signal能處理父子進程之間的結束事件,但Windows環境中並未提供這些(比如fork/wait等)

微軟的文檔上沒有給出進程的父子關係圖譜,在網上找到的是這樣描述的:

使用NtQueryInformationProcess獲得進程信息的時候要用到下面的結構體:

typedef struct _PROCESS_BASIC_INFORMATION {
PVOID Reserved1;
PPEB PebBaseAddress;
PVOID Reserved2[2];
ULONG_PTR UniqueProcessId;
PVOID Reserved3;
} PROCESS_BASIC_INFORMATION;

其中的Reserved3就是父進程ID,但官方文檔未公開,可見微軟並不維護一個關聯性非常強的進程關係樹。


誰說沒有,多少年前任務管理器就有「結束進程樹」菜單。


明顯書里說的沒錯,《Windows核心編程》100頁說得很清楚了。


書上的意思是說windows進程獨立性比較強,每個進程都是獨立的個體。雖然事實上每個進程記錄了自己的父進程是哪個,創建時也繼承了父進程的一些信息,但是一旦開跑之後,大家都是平等的關係了。

在windows上,a創建了b,b創建了c,b退出之後,c無法找到自己的爺爺進程。進程鏈就斷了,c成為了一個頂端進程。

linux則不同,一般情況下,父進程死掉會影響到子進程。

ps:總是要強調一般情況下,不然容易被鄙視


一、 「父子關係」在設計中的意義
如果你不能做到讓一個頁面不言而喻,那麼至少應該讓它自我解釋,這是由Krug先生在《Don』t make me think》中提及的觀點。而「父子」關係的體現,則是向用戶解釋哪些是需要被關注的,哪些是當前最重要的,以保證主路徑的暢通無阻(即便是廣告,如果是定製化的也是有積極意義的)。

二、如何在設計中找到「父子關係」
設計師首先需要判斷需要設計的信息間關係。而判斷依據可以是業務邏輯,可以是用戶操作邏輯。

比如一個成功反饋頁面。如果業務邏輯到此為止結束,沒有下一步動作,那麼反饋信息顯得比較重要;如果業務邏輯中這個成功反饋只是邏輯中的一個環節,那麼下一步動作的引導則強於反饋信息。
http://sina.lt/eRZ3


我來亂扯。

安卓你點開應用管理進程之後可以看到各個應用的服務都在各個應用下面。

Windows任務管理器就直接全部列出來也不分哪家是哪家的~~


windows也有進程層次的,不信你下個火絨劍之類的軟體完整的看看所有進程吧


windows也有進程樹,只是windows的各種細節一般不會暴露給用戶,因為他們假定windows用戶都是小白,他們不需要了解這些玩意


明顯是有的。環境變數可以繼承的。


推薦閱讀:

NT 之後操作系統內核是否就毫無長進了?
Linux 內核為什麼沒有第三方的版本或分支?
不懂彙編可以學 Linux 內核嗎?

TAG:操作系統內核 | 進程 |