Domanda

In caso affermativo, su quale sistema operativo, shell o altro?

Considera il seguente programma java (sto usando java solo come esempio, qualsiasi lingua sarebbe utile per questa domanda, che riguarda di più i sistemi operativi):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

Eseguendolo su Linux e bash, restituisce sempre valori meno uguali a 255, ad es. ( echo $? stampa il codice di uscita del precedente comando eseguito)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

EDITED: la (unica, finora) risposta qui sotto spiega completamente cosa succede su UNIX. Mi sto ancora chiedendo di altri sistemi operativi.

È stato utile?

Soluzione

Non possibile su Unix e derivati. Le informazioni sullo stato di uscita restituite sono costituite da due campi a 8 bit, uno contenente lo stato di uscita e l'altro contenente informazioni sulla causa della morte (0 che implica un'uscita ordinata sotto il controllo del programma, altri valori che indicano che un segnale l'ha uccisa e che indicano se un core è stato scaricato).

Altri suggerimenti

Su Windows moderno, il sistema operativo stesso e la shell di console predefinita ( CMD.EXE ), accettano e mostrano i codici di uscita in almeno l'intero intervallo di numeri interi con segno a 32 bit. L'esempio sopra riportato in CMD.EXE fornisce i codici di uscita richiesti:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows non ha davvero il concetto di segnali Unix, né cerca di dirottare il codice di uscita per aggiungere ulteriori informazioni, quindi finché la shell (o qualunque programma finisca per leggere il codice di uscita) non lo fa che sia, è necessario recuperare i codici di uscita restituiti. Fortunatamente, i programmi che utilizzano il runtime C di Microsoft (inclusi tutti i programmi compilati con MS Visual C ++) preservano il codice di uscita così come dai processi in uscita.

Windows ha molti più codici di uscita, oltre 14.000. (Sono sicuro che spesso ne hai visti alcuni sul tuo schermo).

Ecco che arriva:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top