Linux学习之exit函数
生活随笔
收集整理的這篇文章主要介紹了
Linux学习之exit函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
From: http://hi.baidu.com/homappy/item/549b37c06865877488ad9e75
若父進程在子進程之前終止了,則子進程的父進程將變為init進程,其PID為1;保證每個進程都有父進程。
Linux學習之"exit函數"
先看下"_exit"和"exit":
exit被調用時,將沖刷所有的標準I/O流,關閉所有打開的文件描述符。在傳統實現中,同時也將關閉標準I/O流。即表示標準輸出FILE對象的相關存儲區將被清0。而_exit不會執行這些操作。 由于父子進程共享同一地址空間,當父進程恢復運行并調用printf時,不會產生任何輸出,它返回-1。這就是上一節調用_exit的原因。 然而,大多數exit的現代實現不再關閉流。因為進程即將終止,內核將關閉所有已打開的文件描述符。 Linux程序的終止分為"正常終止"和"異常終止",具體可能情況如下: 正常終止從main返回
調用exit:ISO?C定義
調用_exit或_Exit:前者由ISO?C定義,后者由POSIX.1定義
最后一個線程從其啟動例程返回
最后一個線程調用pthread_exit
異常終止調用abort:產生SIGABRT信號
接到某些信號
最后一個線程對取消請求做出響應
幾個要點: 1.不管進程如何終止,最后都會執行內核中的同一段代碼:為相應進程關閉所有打開描述符,釋放內存等等。 2.若父進程在子進程之前終止了,則子進程的父進程將變為init進程,其PID為1;保證每個進程都有父進程。 3.當子進程先終止,父進程如何知道子進程的終止狀態?事實上,內核為每個終止子進程保存了終止狀態等信息,父進程調用wait等函數,就可獲取該信息。 4.當父進程調用wait等函數后,內核將釋放終止進程所使用的所有內存,關閉其打開的所有文件。 5.對于已經終止、但是其父進程尚未對其調用wait等函數的進程,被稱為僵尸進程(即已經結束,但尚未釋放資源的)。 6.對于父進程先終止,而被init領養的進程會是僵尸進程嗎?init對每個終止的子進程,都會調用wait函數,獲取其終止狀態信息。 綜上所述,子進程調用exit后,父進程必須調用wait。總結
以上是生活随笔為你收集整理的Linux学习之exit函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cacti 被监控机器snmp 配置
- 下一篇: Linux高级文本处理之sed(三)