Linux进程的诞生和消亡
1、進程的誕生
(1)、進程0和進程1 (內核里邊的固有的)
(2)、fork函數和vfork函數用于新進程的產生
2、進程的消亡
(1)、正常終止和異常終止
(2)、進程在運行時需要消耗系統資源(內存、IO),進程終止時理應完全釋放這些資源(如果進程消亡后仍然沒有釋放這些資源,就會造成資源的丟失)。
(3)、Linux系統設計時規定:每一個進程退出時,操作系統會自動回收這個進程涉及到的所有資源(譬如malloc申請的內容沒有free時,當前進程結束時這個內存會被釋放,譬如open打開的文件沒有close的,在程序終止時也會被關閉)。但是操作系統只是回收了這個進程工作時消耗的內存和IO,而并沒有回收這個進程本身占用的內存(8KB,主要是task_struct(這個結構體主要是對該進程的描述)和棧內存)
(4)因為進程本身的8KB內存操作系統不能回收,所以需要別人來輔助回收,因此我們的每一個進程都需要一個幫助它“收尸”的人,這個人就是這個進程的父進程。
3、僵尸進程
(1)、子進程先于父進程結束。子進程結束后父進程此時并不一定立即就能幫助子進程“收尸”,在這一段(子進程已經結束且父進程尚未幫其“收尸”)子進程就被稱為僵尸進程。
(2)、子進程除task_struct和棧外其余內存空間皆以清理。
(3)、父進程可以使用wait或者是waitpid以顯式回收子進程的剩余待回收內存資源并且獲取子進程退出狀態。
(4)、父進程也可以不使用wait或者waitpid回收子進程,此時父進程結束時一樣會回收子進程的剩余待回收內存資源。(這樣設計是為了防止父進程忘記顯式調用wait、waitpid來回收子進程從而造成內存泄漏)
4、孤兒進程
(1)、父進程先于子進程結束,子進程成為一個孤兒進程。
(2)、Linux系統規定:所有的孤兒進程都自動成為一個特殊進程(進程1,也就是init進程)的子進程。(這樣設計的目的也是為了避免造成內存泄漏)。
轉載于:https://www.cnblogs.com/jiangtongxue/p/11234262.html
總結
以上是生活随笔為你收集整理的Linux进程的诞生和消亡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方舟无限资源服务器,方舟生存进化怎么无限
- 下一篇: linux unix shell pr