【问题标题】:exit() vs _exit() : Does calling _exit() ensures closing of all open fd and sockets?exit() vs _exit() :调用 _exit() 是否确保关闭所有打开的 fd 和套接字?
【发布时间】:2012-01-20 07:08:06
【问题描述】:

我使用exit() 来终止进程。我没有注册任何退出处理程序,我也不关心在退出时刷新缓冲区,所以考虑使用 _exit() 作为更强大的方法来终止进程。

唯一的问题是,_exit() 是否优雅地处理关闭所有打开的文件描述符和打开的套接字?

【问题讨论】:

    标签: c linux exit


    【解决方案1】:

    函数exit 调用_exit。来自 TLPI:

    exit() 执行以下操作:

    • 调用退出处理程序
    • stdio 流缓冲区被刷新
    • _exit() 系统调用被调用

    standard page for _exit 这么说:

    所有文件描述符、目录流、转换 描述符和消息目录描述符在调用中打开 进程应关闭。

    【讨论】:

      【解决方案2】:

      是的,是的。实际上,在大多数平台上,操作系统会为终止的进程关闭文件和套接字,因此它是否以_exit()exit()assert(false)kill -KILL 结束并不重要。

      请注意,_exit() 未正确关闭 stdio FILE * 流,并且任何未写入(仍在缓冲)的数据都将丢失。

      【讨论】:

        猜你喜欢
        • 2014-10-03
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 2017-12-24
        • 2013-03-25
        • 2017-12-24
        相关资源
        最近更新 更多