Question

Si oui, sur quel système d'exploitation, quel shell ou quoi que ce soit?

Considérez le programme Java suivant (j'utilise Java uniquement à titre d'exemple. N'importe quel langage conviendrait à cette question, qui concerne davantage les systèmes d'exploitation):

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

En l'exécutant sur Linux et bash, il renvoie toujours des valeurs moins égales à 255, par exemple. ( echo $? affiche le code de sortie de la commande exécutée précédemment)

> 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

MODIFIÉ: la réponse (unique, à ce jour) ci-dessous explique en détail ce qui se passe sous UNIX. Je m'interroge toujours sur les autres systèmes d'exploitation.

Était-ce utile?

La solution

Pas possible sous Unix et ses dérivés. Les informations sur l'état de sortie renvoyées sont constituées de deux champs de 8 bits, l'un contenant l'état de sortie et l'autre contenant des informations sur la cause du décès (0 impliquant une sortie ordonnée sous le contrôle du programme, d'autres valeurs indiquant qu'un signal l'a tué et indiquant si un noyau a été vidé).

Autres conseils

Sous Windows moderne, le système d'exploitation lui-même et le shell de la console par défaut ( CMD.EXE ), acceptent et affichent les codes de sortie dans au moins toute la gamme des entiers signés 32 bits. L'exécution de votre exemple ci-dessus dans CMD.EXE donne les codes de sortie que vous avez demandés:

> 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 n'a pas vraiment le concept de signaux Unix, ni n'essaye de détourner le code de sortie pour ajouter des informations supplémentaires, donc tant que votre shell (ou quelque programme que ce soit finit par lire le code de sortie), ne le fait pas. Que ce soit, vous devriez récupérer les codes de sortie que vous avez retournés. Heureusement, les programmes qui utilisent le runtime C de Microsoft (y compris tous les programmes compilés avec MS Visual C ++) conservent le code de sortie tel quel à partir des processus existants.

Windows a beaucoup plus de codes de sortie, plus de 14 000. (Je suis sûr que vous en avez souvent vu certaines sur votre propre écran).

Voici:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top