作業系統 - unix和windows下進程異同

來源:互聯網
上載者:User

標籤:程式   win32   進程   檔案   進程組   標準   它的   handle   不同的   

        在UNIX系統中,僅僅有一個系統調用能夠用來建立新進程:fork。這個系統調用會建立一個與調用進程相同的副本。

在調用了fork之後。這兩個進程(父進程和子進程)擁有相同的儲存映像、相同的環境字串和相同的開啟檔案。

這就是所有情形。同城,子進程接著運行execve或一個類似的系統調用,以改動其儲存映像並運行一個新的程式。比如,當一個使用者在shell中鍵入命令時,shell就建立一個子進程,然後,這個子進程運行sort。

之所以要安排兩步建立進程,是為了在fork之後但在execve之前同意該子進程處理其檔案描寫敘述符,這樣能夠完畢對標準輸入、標準輸出和標準出錯的重新導向。

        在windows中,情形正相反。一個Win32函數調用CreatProcess既處理進程的建立,也負責把正確的程式裝入新的進程。

該調用有10個參數,期中包含要啟動並執行程式、輸入給該程式的命令列參數、各種安全屬性、有關開啟的檔案是否繼承的控制位、優先順序資訊、為該進程(若有的話)所須要建立的表單規格以及指向一個結構的指標,在該結構中新建立進程的資訊被返回給調用者。

除了CreateProcess。Win32中有大約100個其它的函數用於處理進程的管理、同步以及相關的事物。

        在Unix和Windows中。進程建立之後,父進程和子進程有各自不同的地址空間。

假設當中某個進程在其地址空間中改動了一個字,這個改動對其它進程而言是不可見的。

在UNIX中,子進程的初始地址是父進程的一個副本,可是這裡涉及兩個不同的地址空間,不可寫的記憶體去是共用的(某些UNIX的實現使程式徵文在兩者間共用,由於它不能被改動)。可是。對於一個新建立的進程而言,確實有可能共用其建立者的其它資源。諸如開啟的檔案等。在Windows中,從一開始父進程的地址空間和子進程的地址空間就是不同的。


        在UNIX中,進程和它的全部子女以及後裔project組成一個進程組。

        相反,Windows中沒有進程層次的概念,全部的進程都是地位同樣的。唯一類似於進程層次的暗示是在建立進程的時候。父進程得到一個特別的令牌(成為控制代碼handle),該控制代碼能夠用來控制子進程。可是,它有權把這個令牌傳給某個其它進程。這樣就不存在進程層次了。在UNIX中,進程就不能剝奪其子女的“繼承權”。

作業系統 - unix和windows下進程異同

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.