描述
C 库函数 void exit(int status) 立即终止调用进程。
任何属于该进程的打开的文件描述符都会被关闭,该进程的子进程由进程 1 继承,初始化,且会向父进程发送一个 SIGCHLD 信号。
EXIT_FAILURE和EXIT_SUCCESS是C语言头文件库中定义的一个符号常量,在VC++6.0下头文件stdlib.h中定义如下:
#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0
例子
1)进程
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
pid_t pid; // pid_t类型表示进程ID
//fork会返回俩个值0和>0的值
pid = fork(); // 创建一个新进程,父进程和子进程分别执行不同的任务
if (pid == -1)
{ // 创建新进程失败
printf("Error: fork() failed.\n");
exit(1);
}
if (pid == 0)
{ // 子进程的pid为0
printf("This is the child process. My PID is %d and my parent's PID is %d.\n", getpid(), getppid());
exit(0);
}
else { // 父进程的pid为正数(即子进程的pid)
printf("This is the parent process. My PID is %d and my child's PID is %d.\n", getpid(), pid);
}
return 0;
}
运行结果如下:
终止子进程并不会终止父进程
2)与return的区别
#include <stdio.h>
#include <stdlib.h>
int fun(void);
int main(){
printf("1\n");
fun();
printf("2\n");
}
int fun(){
printf("01\n");
exit(0);
printf("02\n");
return 0;
}
运行结果如下:
被调函数并没有返回,程序直接全部被终止
总结
1、exit(1) / exit(EXIT_FAILURE)
表示异常退出,在退出前可以给出一些提示信息,或在调试程序中察看出错原因,可以结合perror
2、exit(0) / exit(EXIT_SUCCESS)
表示正常退出。
3、 return是语言级别的,是关键字,它表示了调用堆栈的返回,return用于结束一个函数的执行
,将函数的执行信息传出个其他调用函数使用,如果返回的是main函数,则为退出程序。
4、exit是系统调用级别的,是一个函数,它表示了一个进程的结束。 exit是在调用处强行退出程序
,运行一次程序就结束。这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关。
5、当父进程创建了一个子进程并且子进程正常执行结束后,最后一句用了exit(EXIT_SUCCESS);只会终止这个子进程,不会终止父进程和其他的子进程。