Linux下C編程:退出進程

來源:互聯網
上載者:User
#include<stdlib.h>              voidexit(int status);              intatexit(void (*function)(void))              inton_exit(void (*function)(int,void *),void arg*)              voidabort(void)     #include<unistd.h>              void_exit(int status)     #include<assert.h>              voidassert(int expression)

atexit:在其中註冊的無參數函數在退出時調用。成功返回0失敗返回-1,並影響errno

on_exit:在其中註冊的有參數函數在退出時調用。成功返回0失敗返回-1,並影響errno

assert是宏定義,檢查是否出錯,出錯則退出。

abort發送SIGABRT訊息結束當前進程。

exit和_exit函數都是用來終止進程的。當程式執行到exit或_exit時,系統無條件的停止剩下所有操作,清除包括PCB在內的各種資料結構,並終止本進程的運行。但是,這兩個函數是有區別的。

exit()函數與_exit()函數最大區別就在於exit()函數在調用do_exit之前要檢查檔案的開啟情況,把檔案緩衝區的內容寫迴文件。

由於Linux的標準函數庫中,有一種被稱作“緩衝I/O”的操作,其特徵就是對應每一個開啟的檔案,在記憶體中都有一片緩衝區。每次讀檔案時,會連續的讀出若干條記錄,這樣在下次讀檔案時就可以直接從記憶體的緩衝區讀取;同樣,每次寫檔案的時候也僅僅是寫入記憶體的緩衝區,等滿足了一定的條件(如達到了一定數量或遇到特定字元等),再將緩衝區中的內容一次性寫入檔案。這種技術大大增加了檔案讀寫的速度,但也給編程代來了一點兒麻煩。比如有一些資料,認為已經寫入了檔案,實際上因為沒有滿足特定的條件,它們還只是儲存在緩衝區內,這時用_exit()函數直接將進程關閉,緩衝區的資料就會丟失。因此,要想保證資料的完整性,就一定要使用exit()函數。

exit的函式宣告在stdlib.h標頭檔中。

_exit的函式宣告在unistd.h標頭檔當中。

下面的執行個體比較了這兩個函數的區別。printf函數就是使用緩衝I/O的方式,該函數在遇到“\n”分行符號時自動的從緩衝區中將記錄讀出。執行個體就是利用這個性質進行比較的。

exit.c源碼

#include<stdlib.h>     #include<stdio.h>     intmain(void)              {         printf("Using exit...\n");         printf("This is the content inbuffer");         exit(0);              }

輸出資訊:

Usingexit...

Thisis the content in buffer

#include<unistd.h>              #include<stdio.h>              intmain(void)              {         printf("Using exit...\n");         printf("This is the content inbuffer");         _exit(0);     }

則只輸出:

Usingexit...

說明:在一個進程調用了exit之後,該進程並不會馬上完全小時,而是留下一個稱為殭屍進程(Zombie)的資料結構。殭屍進程是一種非常特殊的進程,它幾乎已經放棄了所有的記憶體空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等資訊供其它進程收集,除此之外,殭屍進程不再佔有任何記憶體空間。

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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