进程终止
进程退出场景
- 代码运行完毕,结果正确
- 代码运行完毕,结果不正确
- 代码异常终止
进程常见退出方法
- 正常终止(可以通过
echo $?
查看进程退出码)- 从main函数返回,程序终止。
- 调用exit终止,它会执行一些清理工作(如关闭文件、释放内存等),然后退出程序。
- _exit,_exit 函数也是用来终止进程的,它们会直接退出程序,不会执行任何清理工作。
- 异常退出:
- ctrl + c,信号终止
main函数返回
在主函数main最后加上return,最后会返回给bash
ps:进程正常退出的退出码是 0
可以看到echo把主函数所返回的22读取出来并打印在屏幕。
exit函数返回
exit 函数是用来终止进程的,它会执行一些清理工作(如关闭文件、释放内存等),然后退出程序。
exit函数的参数是当前进程要返回的退出码,该函数可以在任意位置调用
ps : main函数退出的时候,也会会隐式调用 exit
exit()函数原型如下:
#include <stdlib.h>
void exit(int status);
status 填写需要返回的退出码
exit(0)表示程序正常退出,非0表示非正常退出。
exit函数同样能够返回退出码并被echo $?打印
_exit 函数返回
_exit函数的参数是也是当前进程要返回的退出码,可以在任意位置调用,其使用方法与 exit 基本一致,这里不再演示,感兴趣的可以自行演示。
exit与_exit的区别
- 头文件
exit 的头文件
#include<stdlib.h>
_exit 的头文件
#include<unistd.h>
- 功能
- _exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;
- exit()函数:在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,再清除其使用的内存空间,并销毁其在内核中的各种数据结构;
测试exit与_exit的不同
exit()
这里printf(“Text”); 并没有加换行符 \n ,我们来看输出效果:
exit函数在退出前对其进行处理,将字符串“exit”从数据流中输出。
_exit()
这里printf(“Text”); 也没有加换行符 \n ,我们来看输出效果:
_exit函数直接退出了程序,并没有将字符串“_exit”输出。
从中我们可以看到exit和_exit的区别。