exit - 使程式正常中止
#include <stdlib.h>
void exit(int status);
函式
exit()
使得程式正常中止,
status & 0377
的值被返回給父程序
(參見
wait(2)) 。所有用
atexit() 和
on_exit()
註冊的函式都以與註冊時相反的順序被依次執行。使用
tmpfile()
建立的檔案被刪除。
C 標準定義了兩個值
EXIT_SUCCESS 和
EXIT_FAILURE,可以作為
exit()
的引數,來分別指示是否為成功退出。
函式
exit() 不會返回。
SVID 3, POSIX, BSD 4.3, ISO 9899 (``ANSI C'')
在 exit
處理過程中,可能會使用
atexit() 和
on_exit()
註冊其他的函式。通常,最後註冊的函式被從已註冊函式鏈中摘下來,然後執行。如果在處理過程中,又呼叫了
exit() 或
longjmp(),那麼發生的行為是未定義的。
相對於使用 0 和非零值 1
或 -1,使用 EXIT_SUCCESS 和 EXIT_FAILURE
可以稍微增加一些可移植性
(對非 Unix
環境)。特別的,VMS
使用一種不同的約定。
BSD
試圖標準化退出程式碼
- 參見檔案
<sysexits.h> 。
exit()
之後,退出狀態必須傳遞給父程序。這裡有三種情況。如果父程序已設定了
SA_NOCLDWAIT,或者已將 SIGCHLD
的處理控制代碼設定成了
SIG_IGN,這個狀態將被忽略。這時要退出的程序立即消亡。如果父程序沒有表示它對退出狀態不感興趣,僅僅是不再等待,那麼要退出的程式變成一個殭屍程序
(``zombie'',除了包含一個位元組的退出狀態外,什麼也不是)。這樣在父程序後來呼叫
wait()
函式族之一時,可以得到退出狀態。
如果所用實現支援 SIGCHLD
訊號,訊號將被髮送到父程序。如果父程序已設定了
SA_NOCLDWAIT,它被取消定義。(?)
如果程序是一個 session
leader,它的控制終端是會話的控制終端,那麼這個終端的前臺程序組的每個程序都將收到
SIGHUP
訊號;終端將與這個會話斷開,可以再被一個新的控制程序獲得。
如果程序的退出使得一個程序組成為孤兒,並且這個新近成為孤兒的程序組中任何的程序被中止,程序組中所有的程序將依次收到
SIGHUP 和 SIGCONT 訊號。
_exit(2),
wait(2),
atexit(3),
on_exit(3),
tmpfile(3)
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh