Please help me in clarifying the concept of these two python statements in terms of difference in functionality:
sys.exit(0)
os._exit(0)
Please help me in clarifying the concept of these two python statements in terms of difference in functionality:
sys.exit(0)
os._exit(0)
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 afork()
.
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
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()
.
at_exit()
and on_exit()
) are called, in
reverse order of their registration_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
© 2022 - 2024 — McMap. All rights reserved.