Linux进程全解6——进程的诞生和消亡
生活随笔
收集整理的這篇文章主要介紹了
Linux进程全解6——进程的诞生和消亡
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容源于朱有鵬《物聯網大講堂》的課程學習整理,如有侵權,請告知刪除。
1、進程的誕生
(1)進程0和進程1
- 進程0,是操作系統在啟動過程中,由內核一點點構建起來;
- 內核態下的進程1,是由進程0利用內核內部的“fork”創建出來,然后才轉變為用戶態下的進程1;
(2)fork
(3)vfork
2、進程的消亡
(1)正常終止和異常終止;
(2)進程在運行時需要消耗系統資源(內存、IO),進程終止時,應該完全釋放這些資源(如果進程消亡后仍然沒有釋放,相應資源會丟失)。
(3)linux系統設計時規定
- 每一個進程退出時,操作系統會自動回收這個進程涉及到的所有的資源;
- 譬如malloc申請的內容沒有free時,當前進程結束時這個內存會被釋放;
- 譬如open打開的文件沒有close的在程序終止時也會被關閉;
- 但是操作系統只是回收了這個進程工作時消耗的內存和IO,而并沒有回收這個進程本身占用的內存(8KB,主要是task_struct和棧內存)。
(3)操作系統不能回收進程本身的8KB內存,需要別人來輔助回收。
- 因此每個進程都需要一個幫助它收尸的人,這個人就是這個進程的父進程。
3、僵尸進程
(1)子進程先于父進程結束
- 子進程結束后,父進程此時并不一定立即就能幫子進程“收尸”;
- 在這一段時間內(子進程已經結束,而父進程尚未幫其收尸),子進程就被稱為僵尸進程。
(2)子進程除task_struct和棧外,其余內存空間皆已清理。
(3)父進程可以使用wait或waitpid,顯式地回收子進程(剩余待回收的)內存資源并且獲取子進程退出狀態。
(4)父進程也可以不使用wait或者waitpid回收子進程,父進程結束時一樣會回收子進程(剩余待回收的)內存資源。
- 這樣設計是為了防止父進程忘記顯式調用wait/waitpid來回收子進程從而造成內存泄漏
4、孤兒進程
(1)父進程先于子進程結束,子進程成為一個孤兒進程。
(2)linux系統規定,所有的孤兒進程都自動成為一個特殊進程(進程1,也就是init進程)的子進程。
總結
以上是生活随笔為你收集整理的Linux进程全解6——进程的诞生和消亡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海宝付教你如何更好地保护手机隐私
- 下一篇: linux查看jdk详细版本号,linu