What is difference between sys.exit(0) and os._exit(0)

Question:

Please help me in clarifying the concept of these two python statements in terms of difference in functionality:

  1. sys.exit(0)

  2. os._exit(0)

Asked By: Aamir Rind

||

Answers:

According to the documentation:

os._exit():

Exit the process with status n, without calling cleanup handlers, flushing stdio buffers, etc.

Note The standard way to exit is sys.exit(n). _exit() should normally only be used in the child process after a fork().

Answered By: NPE

os._exit calls the C function _exit() which does an immediate program
termination. Note the statement “can never return”.

sys.exit() is identical to raise SystemExit(). It raises a Python
exception which may be caught by the caller.

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

Answered By: prelic

Excerpt from the book "The linux Programming Interface":

Programs generally don’t call _exit() directly, but instead call the exit() library function,
which performs various actions before calling _exit().

  • Exit handlers (functions registered with at_exit() and on_exit()) are called, in
    reverse order of their registration
  • The stdio stream buffers are flushed.
  • The _exit() system call is invoked, using the value supplied in status.

Could someone expand on why _exit() should normally only be used in the child process after a fork()?

Instead of calling exit(), the child can call _exit(), so that it doesn’t flush stdio
buffers. This technique exemplifies a more general principle: in an application
that creates child processes, typically only one of the processes (most often the
parent) should terminate via exit(), while the other processes should terminate
via _exit(). This ensures that only one process calls exit handlers and flushes
stdio buffers, which is usually desirable

Answered By: minglyu
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.