进程终止(exit 和 _exit)

进程退出场景

  • 代码运行结束,结果正确
  • 代码运行结束,结果不正确
  • 代码异常终止

进程常见的退出方法

1、正常退出(可通过指令 : echo $?   查看进程退出码($?是bash中的特殊变量,表示上个命令对应的进程退出码))

  1. 从main函数返回(main函数为程序入口函数,其返回值为进程退出码,0表示结果正确,非0表示结果不正确)
  2. 调用exit(例如:exit(1) 任何函数中可用;本质上也是调用_exit,只是对其进行了包装)
  3. _exit

2、异常退出

  1. 指令 : ctrc + c   信号终止

下面分别介绍一下这几个退出方法

1、_exit

1、函数原型

#include <unistd.h>
void _exit(int status);

2、⚠️

  1. 参数 status 定义了进程的终止状态,父进程通过 wait 来取该值。
  2. 虽然 status 是 int ,但是仅仅有低8位可以被父进程所用。所以 _exit(-1) 时,在终端通过 echo  $? 查看退出码时,发现返回值为255。

2、exit

1、函数原型

  1. #include <unistd.h>
    void exit(int status);

(可以发现,两个函数用法相同)

2、实现原理(exit最终也是调用_exit,但是在调用之前还做了其他工作,如下:)

  1. 执行用户通过 atexit 或者 on_exit 定义的清理函数
  2. 关闭所有打开的流,所有的缓存数据均被写入
  3. 调用 _exit

3、通过图来比较两者

左边_exit直接到内核,右边exit 做一系列事之后才能到达内核。

3、return

return是一种最常见的进程退出方法。

执行 return  n ;相当于执行 exit (n)  ,因为调用 main 的运行时函数会将 main 的返回值当作 exit 函数的参数。

补充:(刷新缓冲的方法)

1、首先得知道,缓冲区也是一段内存。

2、冲刷缓冲方法

  1. fflush(stdout)
  2. exit(0)
  3. '\n'
  4. main()函数退出  return 0
发布了83 篇原创文章 · 获赞 26 · 访问量 8694

猜你喜欢

转载自blog.csdn.net/lexiaoyao_0000/article/details/103846280
今日推荐