我已经读过,当您希望在UNIX中终止进程时,可以调用exit
或_exit
,并且该退出还会释放资源(从main返回时使用的样式) _exit会在没有清理的情况下立即终止。
使用_exit关闭程序对操作环境有什么影响,为什么要使用它?
答案 0 :(得分:4)
除非您安装了_exit
处理程序,否则退出exit
与atexit
时释放的资源没有区别。命名共享内存对象,SysV IPC资源,文件系统中的文件等不会在任何类型的退出中被销毁;分配给进程的内存(实际上,它的整个虚拟内存空间),文件描述符等都会被破坏。有关详细信息,请阅读POSIX中的文档:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html
通常唯一重要的区别是,如果使用_exit
,则可能无法刷新stdio FILE对象(某些写入可能会丢失)。
答案 1 :(得分:2)
从手册页:
exit
:
exit()函数首先调用注册的所有函数 atexit(3C),按照其注册的相反顺序, 除了之前任何一个函数被调用之外 已经被调用的注册函数 它被注册的时间。
_exit
:
_Exit()和_exit()函数在功能上 当量。他们不会调用注册的函数 atexit(),不要调用任何已注册的信号处理程序,并且这样做 没有冲洗开放的溪流。
换句话说,exit
和_exit
仍然执行资源(例如文件句柄和分配的堆内存)回收,如果操作系统这样做,但用户定义的东西,如静态析构函数将不会调用,文件不会在_exit
情况下刷新。
答案 2 :(得分:2)
您的程序会自动配备一些默认的atexit()
处理程序。致电exit()
和
致电_exit()
和
在这两种情况下,
init
进程中被采用。