2026.3.31 Linux
·
1.printf函数不会直接将数据输出,而是将数据先放置在缓冲区
缓冲区内容输出到屏幕上的三个条件:
- 缓冲区满了
- 强制刷新缓冲区 fflush,\n也类似于这个 强制刷新
- 进程结束
调用exit(),结束当前进程 是C标准库函数,会执行用户态的资源清理操作,再调用内核级别的进程终止逻辑,执行步骤
- 执行用户注册的“退出处理函数”
- 刷新并关闭标准I/O流(把缓冲区内容强制刷新到终端或文件中)
- 清理进程私有资源
- 调用_exit()触发内核回收
_exit(),结束进程,但是会将缓冲区内容清空 Unix系统调用
直接触发内核回收,会跳过所有的用户态操作,直接通知内核终止进程
- 不执行退出处理函数
- 不执行刷新标准I/O缓冲区
2.用法:
- 普通单进程程序 优先使用exit()
- 多进程程序(父/子进程),子进程优先使用_exit(),避免干扰父进程的用户态资源,父进程用exit()
|
exit |
_exit |
|
|
函数类型 |
C标准库函数 |
系统调用 |
|
标准I/O缓冲区 |
强制刷新并关闭 |
不刷新,直接丢弃原数据 |
3.复制进程fork
头文件:<unistd.h>
函数原型:pid_t fork(void)
返回值:返回的整数类型,有三种返回情况
- 在父进程中,返回子进程的pid(正整数),用于父进程的识别和子进程的管理
- 在子进程中,pid的返回值是0,用于确认子进程的身份
- 如果是-1,表示fork失败(内存不足,系统进程数达到上限),设置一个错误原因给到系统全局变量errno,表示错误原因
更多推荐




所有评论(0)