- Exit (operating system)
A
computer process terminates its execution by making an exitsystem call . More generally, an exit in amultithreading environment means that a thread of execution has stopped running. Theoperating system reclaims resources (memory, files, etc.) that were used by the process. The process is said to be a "dead process" after it terminates.How it works
Under
Unix andUnix-like operating systems , every process is starting by aparent process when it executes a "fork"system call . The parent process may then wait for thechild process to terminate, or may continue execution (possibly forking off other child processes). When the child process terminates ("dies"), either normally by calling exit, or abnormally due to afatal error or signal (e.g.,SIGTERM , SIGINT,SIGKILL ), anexit status is returned to the kernel and aSIGCHLD signal is sent to the parent process. The exit status can then be retrieved by the parent process.Most operating systems allow the terminating process to provide a specific
exit status to the system, which is made available to the parent process. Typically this is a small integer value, although some operating systems (e.g., Plan 9) allow acharacter string to be specified.Clean up
The exit operation typically performs clean-up operations within the process space before returning control back to the operating system. Some systems and
programming languages allow usersubroutines to be registered so that they are invoked at program termination before the process actually terminates for good. As the final step of termination, a primitive system exit call is invoked, informing the operating system that the process has terminated and allows it to reclaim the resources used by the process.It is sometimes possible to bypass the usual cleanup;
C99 offers the_Exit()
function, deriving fromSVr4 _exit()
, which terminates the current process "immediately". This may be used, for example, in afork-exec routine when theexec call fails to replace the child process; callingatexit
routines would erroneously release resources belonging to the parent.Orphans and zombies
Some operating systems handle a child process whose parent process has terminated in a special manner. Such an "
orphan process " becomes a child of a special "root process", which then waits for the child process to terminate. Likewise, a similar strategy is used to deal with a "zombie process ", which is a child process that has terminated but whose exit status is ignored by its parent process. Such a process becomes the child of a special parent process, which retrieves the child's exit status and allows the operating system to complete the termination of the dead process. Dealing with these special cases keeps the systemprocess table in a consistent state.Examples
The following programs do nothing but terminate and return a success status to the system.
C:
or:
C++ :COBOL :IDENTIFICATION DIVISION. PROGRAM-ID. SUCCESS-PROGRAM. PROCEDURE DIVISION. MAIN. MOVE ZERO TO RETURN-CODE. END PROGRAM.
Java:
DOS Batch file :Perl :Unix shell :DOS Assembly :; 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 mainSome programmers may prepare everything for INT 21h at once:
MOV AX, 4C00h ; replace the 00 with your error code in HEX
Linux Assembly:; For
NASM MOV AL, 1 ; Function 1: exit() MOV EBX, 0 ; Return codeINT 80h ; The only interrupt Linux uses!ee also
*
Child process
*Execution
*Exit command
*Exit status
*Fork
*Kill command
*Orphan process
*Process
*Parent process
*SIGCHLD
*Task
*Thread
*WaitExternal links
*
Wikimedia Foundation. 2010.