exit
函数是 C 语言中用于结束程序执行的一个函数,它的原型如下:
void exit(int status);
其中,status
参数表示程序的退出状态。在 Linux 系统中,进程退出状态是一个 8 位整数,其中高 7 位表示退出状态码(exit status),低 1 位表示退出类型(exit type)。
-
退出状态码(exit status):用于表示程序正常退出时的返回值。通常情况下,0 表示成功,非 0 值表示出错。用户可以自定义退出状态码,但应避免使用 1-2、126-165、255 这些保留值。
-
退出类型(exit type):用于表示进程是否因为信号而终止。如果退出类型为 0,表示进程正常退出;如果退出类型为 1,表示进程因为信号而终止。
当程序调用 exit
函数时,它会执行以下操作:
- 关闭所有打开的文件描述符。
- 释放进程占用的内存和资源。
- 将退出状态返回给父进程。
在 Linux 系统中,父进程可以使用 wait
或 waitpid
函数来获取子进程的退出状态。例如:
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) { // 子进程
exit(42);
} else { // 父进程
int status;
wait(&status);
if (WIFEXITED(status)) { // 判断子进程是否正常退出
int exit_status = WEXITSTATUS(status);
printf("子进程退出状态码: %d\n", exit_status);
}
}
return 0;
}
在这个例子中,子进程调用 exit(42)
退出,父进程使用 wait
函数获取子进程的退出状态,并通过 WIFEXITED
和 WEXITSTATUS
宏提取退出状态码。