C 程式設計/stdlib.h/exit
在許多計算機作業系統中,計算機程序透過發出 **exit** 系統呼叫來終止其執行。更一般地,在多執行緒環境中,退出意味著執行執行緒已停止執行。作業系統會回收程序使用的資源(記憶體、檔案等)。該程序在終止後被稱為死亡程序。
在 Unix 和類 Unix 作業系統中,當父程序執行 fork 系統呼叫時,程序啟動。父程序隨後可以等待子程序終止,或者可以繼續執行(可能派生出其他子程序)。當子程序終止(“死亡”)時,無論是透過呼叫 exit 正常終止,還是由於致命錯誤或訊號(例如,SIGTERM、SIGINT、SIGKILL)異常終止,都會將退出狀態返回給作業系統,並向父程序傳送 SIGCHLD 訊號。父程序隨後可以透過 wait 系統呼叫檢索退出狀態。
大多數作業系統允許終止程序向系統提供特定的退出狀態,該狀態可供父程序使用。通常,這是一個小的整數值,儘管某些作業系統(例如,Plan 9)允許指定一個字元字串。
退出操作通常在將控制權交回作業系統之前,在程序空間內執行清理操作。一些系統和程式語言允許使用者註冊子例程,以便在程式實際終止之前,在程式終止時呼叫這些子例程。作為終止的最後一步,將呼叫一個原始的系統退出呼叫,通知作業系統程序已終止,並允許其回收程序使用的資源。
有時可以繞過通常的清理;C99 提供了 _exit() 函式,它在沒有任何額外程式清理的情況下終止當前程序。例如,這可以在 fork-exec 例程中使用,此時 exec 呼叫未能替換子程序;呼叫 atexit 例程將錯誤地釋放屬於父程序的資源。
某些作業系統以特殊方式處理其父程序已終止的子程序。這種孤兒程序成為一個特殊的根程序的子程序,該程序隨後等待子程序終止。同樣,類似的策略用於處理殭屍程序,即已終止但其退出狀態被其父程序忽略的子程序。這種程序成為一個特殊父程序的子程序,該程序檢索子程序的退出狀態並允許作業系統完成死亡程序的終止。處理這些特殊情況可以使系統程序表保持一致的狀態。
以下程式終止並向系統返回成功的退出狀態。
C
#include <stdlib.h>
int main(void)
{
exit(EXIT_SUCCESS);
}
或者
#include <stdlib.h>
int main(void)
{
return EXIT_SUCCESS;
}
C++
#include <cstdlib>
int main(void)
{
std::exit(EXIT_SUCCESS); // or return EXIT_SUCCESS
}
COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. SUCCESS-PROGRAM.
PROCEDURE DIVISION.
MAIN.
MOVE ZERO TO RETURN-CODE.
END PROGRAM.
Java
public class Success
{
public static void main(String[] args)
{
System.exit(0);
}
}
DOS 批處理檔案
exit 0
Perl
#!/bin/perl
exit;
PHP
<?php
exit(0);
?>
Python
#!/usr/bin/python
import sys
sys.exit(0)
Unix shell
exit 0
Pascal
program pr1;
begin
exit(0);
end;
DOS 彙編
; For MASM/TASM
.MODEL SMALL
.STACK
.CODE
main PROC NEAR
MOV AH, 4Ch ; Service 4Ch - Terminate with Error Code
MOV AL, 0 ; Error code
INT 21h ; Interrupt 21h - DOS General Interrupts
main ENDP
END main ; Starts at main
一些程式設計師可能會一次為 INT 21h 準備所有內容
MOV AX, 4C00h ; replace the 00 with your error code in HEX
Linux 彙編
; For NASM MOV AL, 1 ; Function 1: exit() MOV EBX, 0 ; Return code INT 80h ; The only interrupt Linux uses!
# For GAS
.text
.globl _start
_start:
movl $1, %eax # System call number 1: exit()
movl $0, %ebx # Exits with exit status 0
int $0x80 # Passes control to interrupt vector
# invokes system call—in this case system call
# number 1 with argument 0
|
- : 導致正常程序終止 – Linux 庫函式 手冊
std::exit的 C++ 參考