Red Hat Bugzilla – Bug 28146
RETVAL=$? isn't always reliable due to daemon()/fork()
Last modified: 2007-04-18 12:31:32 EDT
This is probably a more generic problem due to a coding style, but it happened to me with
OpenSSH, so I'll put it in the record here.
(just trying to start sshd when it's already running)
# ./sshd -d
socket: Invalid argument
debug1: Bind to port 22 on 0.0.0.0.
fatal: Cannot bind any address.
# echo $?
# echo $?
With './sshd', the same fatal message is printed to syslog.
Now, the init script e.g. does:
action $"Starting $prog: " /usr/sbin/sshd
now RETVAL is 0 (as above), even though sshd really fatal()'ed out with 255 exit code.
Kevin Steves <email@example.com> explained on firstname.lastname@example.org list:
this one has forked and detached from the terminal at the point of that
error. its parent does exit(0) in daemon() which is what the shell
So, it'd appear RETVAL or exit codes are not always too reliable. Luckily in this case it doesn't really
matter that RETVAL is mistaken to be 0.
This is not a bug but rather a feature of the current SYS V init
scripts style code. The RETVAL can reflect only errors before the
daemonization happens. There is nothing we can do with that.