Scroll to navigation

EXIT(3) Linux Programmer's Manual EXIT(3)

NAME

exit - 使程序正常中止

SYNOPSIS 总览

#include <stdlib.h>

void exit(int status);

DESCRIPTION 描述

函数 exit() 使得程序正常中止,status & 0377 的值被返回给父进程 (参见 wait(2)) 。所有用 atexit()on_exit() 注册的函数都以与注册时相反的顺序被依次执行。使用 tmpfile() 创建的文件被删除。

C 标准定义了两个值 EXIT_SUCCESSEXIT_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)

2001-11-17