EXIT(3)

NAME
exit - 使程式正常中止

SYNOPSIS 總覽
#include <stdlib.h>

void exit(int status);

DESCRIPTION 描述
函式 exit() 使得程式正常中止，status & 0377 的值被返回給父程序 (參見 wait(2)) 。所有用 atexit() 和 on_exit() 註冊的函式都以與註冊時相反的順序被依次執行。使用 tmpfile() 建立的檔案被刪除。

C 標準定義了兩個值 EXIT_SUCCESS 和 EXIT_FAILURE，可以作為 exit() 的引數，來分別指示是否為成功退出。

RETURN VALUE 返回值
函式 exit() 不會返回。

CONFORMING TO 標準參考
SVID 3, POSIX, BSD 4.3, ISO 9899 (``ANSI C'')

NOTES 要點
在 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 訊號。

SEE ALSO 參見
_exit(2), wait(2), atexit(3), on_exit(3), tmpfile(3)

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh