进程终止
进程在被创建后,开始运行完成其工作。通常在下列几个条件使得进程退出:
- 正常退出
- 出错退出
- 严重错误:程序中有bug
- 被其他进程杀死
进程退出的两个接口(exit 、 _exit)
#include <stdlib.h>
void exit(int status);
#include <unistd.h>
void _exit(int status);
参数:
status
:进程退出时的一个状态信息。父进程在回收子进程资源时获取。
示例1:exit
#include <stdlib.h>
#include <stdio.h>
int main(){
printf("hello\n");
printf("world");
exit(0);
return 0;
}
编译执行,打印hello\n
,在打印world
,最后程序退出
示例2:_exit
#include <stdio.h>
#include <unistd.h>
int main(){
printf("hello\n");
printf("world");
_exit(0);
return 0;
}
编译执行,只打印 hello\n
,不打印 world
,程序直接退出
为什么C
标准库与 系统接口 打印的结果不同?
在执行程序时,字符串会被保存在缓冲区中,使用标准C库中 exit
,在调用系统_exit
之前,首先调用退出处理函数,刷新I/O缓冲,关闭文件描述符,最后调用_exit
退出进程。所以在执行 printf("world")
后,调用exit
,会刷新至控制台,再退出进程。而_exit
则不会刷新缓冲区,导致不会输出world
。所以尽可能使用C标准库中的 exit()
。
一键三连是对我最大支持与鼓励!欢迎关注编程小镇,每天涨一点新姿势😄。