进程终止
进程退出场景
我们常见的进程退出场景有如下几种:
代码运行完毕,结果正确
代码运行完毕,结果不正确
代码异常终止
退出码
我们可以通过echo $?
来查看最近一次进程退出时的退出码。
这里使用一段代码来看看我们编写的函数的退出码是什么?
#include<stdio.h>
int main()
{
printf("hello world\n");
return 1;
}
运行结果如下:
这里我们可以看到我们将return值设为1,使用echo $?打印出来的退出码也是1,说明main的return值就是进程的退出码。第二次打印退出码打印的是echo $?的退出码,这说明代码运行完毕,结果正确,返回0,代码运行完毕,结果不正确返回非0。
错误码
错误码和之前学过的命令行参数以及环境变量类似,都是以字符串的形式存放在对应是数组中,可以通过遍历下标来查看,下面通过一段代码来查看有哪些错误码
int main()
{
int i=0;
for(i=0;i<100;i++)
{
printf("%d:%s\n",i,strerror(i));
}
return 0;
}
运行结果如下:
退出程序
exit
使用exit命令可以直接退出程序,在任意位置调用,都代表终止进程,参数是退出码。
int main()
{
printf("hello world\n");
exit(10);
printf("hello world\n");
return 0;
}
这里看到exit后面()内的数字就是退出码,并且进程会在遇到exit位置时就会终止进程,不执行后面的代码。
return
return:main函数return,代表进程退出,return是我们比较常用的一种退出进程的方式,这里需要注意的是exit和return本身就会要求系统进行缓冲区刷新。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数。
int main()
{
printf("hello world\n");
exit(10);
printf("hello world\n");
return 0;
}
这里我们看到即使没有使用\n选项,系统也进行了缓冲区刷新。
_exit
_exit:强制终止进程,不进行程序的后续收尾工作,比如刷新缓冲区.
int main()
{
printf("hello world");
sleep(4);
_exit(12);
return