Hmm. Looking at this patch, I am wondering what was the reason for the
current one-byte limitation.
I think the patch is fine. si_status, wo_stat are int too, so I do not
see any possibility for truncation before reporting to user-space.
Oleg.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Looking at the list for reserved exitcodes[1] everything covers
operational use and then if you look to /usr/include/sysexits.h for an
idea of the 'spirit' behind exitcodes, it is pretty clear it is all
rather 'generic' and vague to the precise reason, but it categorises
the type of error to maybe something the parent could gracefully handle.
It is not a freetext communications channel :)
If you have $BIGNUM outcomes of errors, you probably should not be using
the exitcode path to communicate this information back up, although I
would agree it looks like very natural solution. I would be more
inclined to pass up to the parent this information via a pipe (whether
that is via stdout, stderr or even a filesystem located pipe). No doubt
if you are trying to return $BIGNUM error codes, you probably want to
look more to an approach based on the one covered in RFC3463; there if
you return a sysexits.h type code then the child's STDOUT is consulted
for the extended error code reason...I think this approach is *very*
nice.
Cheers
[1] http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF
[2] http://tools.ietf.org/html/rfc3463
--
Alexander Clouter
sigmonster says: If in doubt, mumble.
I think this is just a convention of userspace program. if program want
to obey this convention, it should be use one-byte limition exit code, I
agree this.
so this mail thread's subject should change to "if program use exit code
with not want to obey the convention, kernel should return which value?"
so the key is: from kernel point of view, kernel should don't care any
userspace program's convention.
how to use exit code is program's business, kernel should not to force
userspace program to obey some convention, it's not a good idea for
kernel.
if program use exit(43), kernel return 43; if program use exit(11111),
kernel should return 11111, not return 43. Apparently, program don't
want 43, it just want 11111.
program is very hard to understand to get 43. program maybe don't
understand why she give kernel a int exit code, but kernel give her a
byte back. she don't know any convention, she just want program works.
So kernel can make more smooth for userspace program.
This is my 2 cents. Pls give your comments freely. :-)
jovi
A dig around with my Googlefu and on Wackipedia gave me nothing
either...
One thing I can think of why the kernel is forcing a one byte return
code is that:
* guarantee there is no endian issue; hard to pull off though but I
guess that exit code could travel across IP to another
architecture
* stop people abusing the exitcode :)
There is probably a deeper reason as errno.h/errno-base.h all seem to be
one byte return codes too. I'm starting to ponder if that top three
bytes are meant to carry some other information?
Cheers
--
Alexander Clouter
sigmonster says: Make sure your code does nothing gracefully.
man 2 wait
and also note that int was 16bits in the times when Unix wait/exit
behaviour was formulated.
Alan
There are back-compatibility issues. If my crufty old child does
exit(0xff01);
and my crufty old parent does
if (exit_code == 1)
then I think the patch just broke my application. The company which
wrote it no longer exists and I don't have source...
Is it worth this risk?
Also, the patch was missing a signed-off-by: and was in some complicated
html-in-mime format.
Also standards conformance issues. Posix says this about exit():
"The value of status may be 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] or
any other value, though only the least significant 8 bits (that is,
status & 0377) shall be available to a waiting parent process."
Full reference here:
http://www.opengroup.org/onlinepubs/000095399/functions/exit.html
-Tony