sys.exit(0)和os._exit(0)有什么区别

Aam*_*nan 58 python

请帮助我根据功能的不同来澄清这两个python语句的概念:

  1. sys.exit(0)

  2. os._exit(0)

NPE*_*NPE 64

根据文件:

os._exit():
Run Code Online (Sandbox Code Playgroud)

退出状态为n的进程,不调用清理处理程序,刷新stdio缓冲区等.

注意退出的标准方法是sys.exit(n)._exit()通常只应在a之后的子进程中使用fork().

  • 有人可以扩展,"通常只应该在fork()之后的子进程中使用"?谢谢 (8认同)
  • 在我的程序中,我启动了多个线程,我想要的是,当任何线程中出现异常时,整个程序都应该终止。我在线程之外使用 sys.exit(1) 但这仅从单线程退出而不是从程序退出。所以我使用 os_exit(1) 这是个好方法吗? (2认同)

pre*_*lic 29

os._exit调用C函数_exit(),它立即终止程序.请注意语句"永远不会返回".

sys.exit()是完全相同的raise SystemExit().它引发了一个Python异常,可能被调用者捕获.

原帖:http://bytes.com/topic/python/answers/156121-os-_exit-vs-sys-exit

  • 立即终止程序有什么缺点? (2认同)

min*_*lyu 9

摘自《Linux编程接口》一书:

\n

程序通常不会直接调用\xe2\x80\x99 _exit(),而是调用exit()库函数,\n库函数在调用 之前执行各种操作_exit()

\n
    \n
  • 退出处理程序(用at_exit()和注册的函数on_exit())被调用,\n按照其注册的相反顺序
  • \n
  • stdio 流缓冲区被刷新。
  • \n
  • 使用状态中提供的值调用系统_exit()调用。
  • \n
\n
\n

有人可以详细说明为什么_exit()通常只在 fork() 之后的子进程中使用吗?

\n

exit()子进程可以调用_exit(),而不是调用 ,这样它就不会刷新 stdio\n缓冲区。此技术举例说明了一个更通用的原则:在创建子进程的应用程序中,通常只有一个进程(通常是父进程)应通过 终止exit(),而其他进程应通过 终止_exit()。这确保只有一个进程调用退出处理程序并刷新\nstdio 缓冲区,这通常是可取的

\n