EXIT_SUCCESS & EXIT_FAILURE constants / _exit
authorgumartinm <gu.martinm@gmail.com>
Sun, 23 Dec 2012 19:15:17 +0000 (20:15 +0100)
committergumartinm <gu.martinm@gmail.com>
Sun, 23 Dec 2012 19:15:17 +0000 (20:15 +0100)
commit02128dde627b132618115be1b08fdbd5a18cb44b
tree07668458e4e70d9473a6ecbf24f64b93c91ebc83
parentda2c677c7aab08483fd3b4e086854dd3a5ce0def
EXIT_SUCCESS & EXIT_FAILURE constants / _exit

About _exit: I do not think I really need to use _exit but anyway it seems to me like it does not hurt me so... Let's do it in the right way!!!

From: http://www.unixguide.net/unix/programming/1.1.3.shtml / http://stupefydeveloper.blogspot.com.es/2009/01/c-to-exit-or-to-exit.html

There are a few differences between exit() and _exit()
that become significant when fork(), and especially
vfork(), is used.

The basic difference between exit() and _exit() is that
the former performs clean-up related to user-mode constructs in the
library, and calls user-supplied cleanup functions, whereas the latter
performs only the kernel cleanup for the process.

In the child branch of a fork(), it is normally incorrect to use
exit(), because that can lead to stdio buffers being flushed
twice, and temporary files being unexpectedly removed. In C++ code the
situation is worse, because destructors for static objects may be run
incorrectly. (There are some unusual cases, like daemons, where the
parent should call _exit() rather than the child; the
basic rule, applicable in the overwhelming majority of cases, is that
exit() should be called only once for each entry into
main.)

In the child branch of a vfork(), the use of exit() is
even more dangerous, since it will affect the state of the parent
process.
Daemon/javafork.c