Der von 'wait ()' zurückgegebene Beendigungsstatus ist ein 16-Bit-Wert. Von diesen 16 Bits stammen die höherwertigen 8 Bits aus den niederwertigen 8 Bits des von 'exit ()' zurückgegebenen Wertes - oder des von main()
zurückgegebenen Wertes. Wenn das Programm auf natürliche Weise abstirbt, sind die niederwertigen 8 Bits der 16 alle Null. Wenn das Programm aufgrund eines Signals abstirbt, codieren die 8 Bits niedriger Ordnung die Signalnummer und ein Bit, das anzeigt, ob ein Kern-Dump stattgefunden hat. Bei einem Signal wird der Exit-Status als Null behandelt - Programme wie die Shell neigen dazu, die niederwertigen Bits als Fehler zu interpretieren.
Die meisten Maschinen speichern den 16-Bit-Wert tatsächlich in einer 32-Bit-Ganzzahl, und das wird mit vorzeichenloser Arithmetik gehandhabt. Die höherwertigen 8 Bits der 16 können alle 1 sein, wenn der Prozess mit "exit (-1)" beendet wird, aber das wird als 255 angezeigt, wenn es um 8 Bits nach rechts verschoben wird.
Wenn Sie den Wert wirklich in eine vorzeichenbehaftete Menge umwandeln möchten, müssen Sie basierend auf dem 16. Bit ein bisschen drehen.
%Vor% Perl gibt einen Subprozess-Exit-Code auf die gleiche Weise zurück wie das C-Laufzeitbibliotheks-Makro WEXITSTATUS
, das die folgende Beschreibung in wait(2)
:
Der wichtige Teil ist hier die niedrigstwertigen acht Bits . Aus diesem Grund erhalten Sie einen Exit-Code von 255. Die Manpage perlvar
beschreibt $?
wie folgt:
Hier gibt es keine spezielle Behandlung für negative Zahlen im Exit-Code.
Auf welche Weise verschieben Sie es? Bitte geben Sie ein Codebeispiel an.
auch:
%Vor%gibt ein sehr einfaches Beispiel, was man mit $ anfangen kann?
Auch Ссылка
Exit-Werte sollten zwischen 0 und 255 liegen. Ihre Verschiebung, kombiniert mit der Tatsache, wie negative Werte tatsächlich vom Computer gespeichert werden, sollte einen Einblick geben.