Warum ist der Exit-Code 255 statt -1 in Perl?

7

Warum bekomme ich, wenn ich den Exit-Code $? in Perl um acht verschiebe, 255, wenn ich erwarte, dass es -1 ist?

    
syker 28.04.2010, 02:21
quelle

3 Antworten

20

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.

%Vor%

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%

Siehe auch SO 774048 und SO 179565 .

    
Jonathan Leffler 28.04.2010, 02:31
quelle
10

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) :

hat %Vor%

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:

%Vor%

Hier gibt es keine spezielle Behandlung für negative Zahlen im Exit-Code.

    
Greg Hewgill 28.04.2010 02:42
quelle
0

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.

    
Bob 28.04.2010 02:25
quelle

Tags und Links