Linux進程入門

來源:互聯網
上載者:User

標籤:

Linux進程入門

 

學習Linux下通訊過程中看兩本書《Linux網路編程》和《Unix環境下進階編程》。在此也不想評論哪本書好,哪本書不好,想詳細瞭解的話還是建議看《Unix環境進階編程》。本文是在看《Linux網路編程》一書的學習記錄。

 

思維導圖如下:

建立進程

通過fork()建立進程,fork()系統調用調用一次返回兩次,返回給父進程的是子進程的進程id(pid)。返回給子進程的是0。通過父進程沒有相應的函數擷取子進程id。但是子進程可以通過getppid()擷取父進程id,getpid()擷取本身進程id。

Fork()調用細節

Fork()將父進程資料和代碼完全拷貝給子進程。他們運行在不同的地址空間。所以子進程修改某個局部變數與父進程不會跟著修改。值得一提的是子進程從父進程中繼承而來的檔案描述符。他們都相當於指標的作用。實際資料在系統空間中。類似

 

 

Pa1和pa2指向同一個地址,修改*pa1,*pa2隨著修改。檔案描述符原理類似。

 

 

 

上面沒有檢查函數的傳回值。這不是個好習慣。

以上程式啟動並執行結果如下:

 

首先子進程移動檔案指標,位置為10。父進程再移動指標,如果父進程當前檔案指標位置為0,則read之後,pos應該為10。根據輸出結果可以知道檔案父進程的檔案指標在read之前已經到達10了,所以說父子進程都應用同一個檔案描述符。

進程同步

通過wait和waitpid來同步。Wait會堵塞,直到有子進程退出,父進程從核心中取出退出進程的退出資訊。Waitpid有選項設定是否堵塞。

進程終止

Exit與_exit函數都可以退出進程。Exit會關閉檔案描述符,重新整理緩衝區。_exit沒有這些處理。

 

兩種異常退出

1.父進程運行結束,子進程還沒運行結束。則由init進程對子進程進行領養

2.子進程結束,但是在父進程中沒有調用wait來擷取子進程的退出狀態。成為僵死進程。

 

Linux進程入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.