【问题标题】:Difference between exit and quick_exitexit 和 quick_exit 的区别
【发布时间】:2023-04-02 07:01:01
【问题描述】:

c11标准中包含的void quick_exit( int exit_code )和c11标准之前已经存在的void exit( int exit_code )函数有什么区别?

【问题讨论】:

  • quick_exit 不会调用在atexit 注册的处理程序。
  • 我不知道将其标记为重复但你有read this吗?你真的做了多少研究?
  • @Weather Vane ,不,它不是那么容易找到所以非常感谢,它有很多信息! ,我用谷歌搜索了它,但我不清楚什么时候使用一个功能,什么时候使用另一个功能,而且我对 c11 标准的搜索不多,所以没有碰巧找到你推荐的帖子。
  • 我也是found this PDQ
  • 这里没有关于这些函数不同之处的任何信息,它们是否有一些重要的区别或者它们几乎相同,如果它们相同,为什么需要声明一个新的退出函数? ?

标签: c c11


【解决方案1】:

exit 确保流缓冲区被刷新、关闭等。quick_exit 的此类行为未在标准中指定。

通过这些,您可以定义两种退出应用程序的方式,一种让您在完全清理的情况下终止(由在atexit 注册的函数创建),另一种让应用程序更快地终止而无需清理太多东西(调用到at_quick_exit注册的函数)。

【讨论】:

    【解决方案2】:

    只有函数 _Exit、abort、signal 和 quick_exit 可以在信号处理程序中从头文件 signal.h 中调用。

    调用任何其他函数,如exit,将导致未定义的行为。

    【讨论】:

      【解决方案3】:

      quick_exit 的 Linux 手册页总结如下:

      quick_exit - 快速退出程序,运行最少的清理

      quick_exit() 函数快速退出程序,调用任何清理 在 at_quick_exit(3) 中注册的函数,但在 atexit(3) 中没有注册。

      对于exit

      exit - 导致正常进程终止

      exit() 函数导致正常进程终止,并将 status & 0377 的值返回给父进程(参见 wait(2))。

      所以主要区别在于quick_exit 在退出时不会执行那么多清理操作。

      【讨论】:

        猜你喜欢
        • 2012-04-03
        • 1970-01-01
        • 2012-03-14
        • 2021-05-20
        • 2016-12-08
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        相关资源
        最近更新 更多