Habe eben mal getestet. Scheinbar werden nur Rückgabewerte zwischen 0 und 255 unterstützt. Werte außerhalb dieses Bereichs werden auf diesen zurückgeführt:
Laut Wikipedia hängt das nicht an Java oder der bash, sondern an der Prozessverwaltung des Betriebssystem. Und Unix (POSIX?) kennt wohl nur 0-255. Selbst wenn Java int als Rückgabewert verwendet, so wird es vom Betriebssystem modulo 256 genommen bevor der Wert an den Vaterprozess weitergereicht wird.
Das widerspricht aber der Aussage von hubendubel wonach unter UNIX auch negative Werte auftreten können. Mal angenommen hat nur byte würde das bedeuten, dass man von -128 bis +127 zur Verfügung hat. Ist natürlich immer ein Interpretationsproblem, da die negativen Zahlen ja einfach nur durch ein gesetztes Bit festgelegt werden.
Zuletzt geändert von ds10 am 18 Mär 2008, 00:53, insgesamt 1-mal geändert.
Folgender Satz steht in dem Artikel der englischen Wikipedia unter Unix:
As such, on Unix exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.
Wie Du schon sagtest, ist das Interpretationssache. Aber nicht wir können das interpretieren, das tut das OS. Wenn ein Programm erlaubterweise -1 zurück gibt kommt beim Vater dennoch 255 an. Wenn der Vater (=TVB) nun auf einen Wert außerhalb von 0-255 testet wird der Test aller Wahrschinlichkeit nach schiefgehen.
Ich hab's jetzt unter Linux getestet, negative Werte sind nicht möglich (werden zumindest von Bash nicht zurückgegeben).
Also würde ich vorschlagen 249 wird für keine Programmierung ohne Fehler verwendet, das sollte weit genug weg sein, von den üblichen verdächtigen Rückgabewerten und auf allen Betriebssystemen funktionieren.
So, ich habe es nochmal getestet. Es werden Werte zwischen 0 und 255 Zurückgegeben. Wird der Prozess mit einem Signal abgebrochen, so wird 128+Signalnummer zurückgegeben. Wie tsattler_ bereits schrieb, wird modulo 256 gerechnet.
Möchte das Anliegen von tsattler_ unterstützen, egal welcher exit-code -
ein "keine Fehlermeldung - keine Aufnahme", quasi ein legales "cancel" wäre klasse.