进程终止的三种情况
1.代码跑完,结果正确
main函数return 0 即可
2.代码跑完,结果不正确
cpp
#include <iostream>
using namespace std;
double Div(int a, int b)
{
if(b == 0)
{
// 被除数为0 ,程序将出错
}
return a/ b;
int main()
{
double c = Div(10,0);
return 0;
}
解决思路,通过返回错误码来告诉父进程结果出错
解决方案 1. main() 函数返回错误码
- exit() 函数传入错误码.用于强制终止进程
3._exit() 函数传入错误码.Linux系统函数,不会冲刷缓冲区相当于简化版的exit()
错误码可自定义,也可直接用c标准库里的
cpp
// 查看c标准库里的错误码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int errcode = 0;
for(errcode = 0; errcode <= 255; errcode++)
{
printf("错误码%d : %s\n", errcode, strerror(errcode));
}
return 0;
}
查看退出码
指令 echo $? 查看当前bash进程最近一个子进程的退出码
3.代码跑不完
当进程遇到一些语法没问题但无法处理的错误时,常见的如除以0,野指针等,此时进程绝对无法取得有意义的结果,进程的返回值已经失去意义,将由操作系统以发信号的方式杀死进程
cpp
int main()
{
// double c = Div(10,0);
int d = 10 / 0; // 除0 错误,这个进程无法处理,进程本身已经失去意义,将被操作系统以发信号的方式终止
return 0;
}
kill -l 指令查看信号的种类