1.printf函数不会直接将数据输出,而是将数据先放置在缓冲区

缓冲区内容输出到屏幕上的三个条件:

  • 缓冲区满了
  • 强制刷新缓冲区 fflush,\n也类似于这个 强制刷新
  • 进程结束

调用exit(),结束当前进程 是C标准库函数,会执行用户态的资源清理操作,再调用内核级别的进程终止逻辑,执行步骤

  1. 执行用户注册的“退出处理函数”
  2. 刷新并关闭标准I/O流(把缓冲区内容强制刷新到终端或文件中)
  3. 清理进程私有资源
  4. 调用_exit()触发内核回收

_exit(),结束进程,但是会将缓冲区内容清空  Unix系统调用

直接触发内核回收,会跳过所有的用户态操作,直接通知内核终止进程

  1. 不执行退出处理函数
  2. 不执行刷新标准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,表示错误原因
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐