Chaque fois qu'un programme Perl, Python, C ++ ou Tcl s'arrête avec une exception non gérée, ces exécutions de langage prennent soin d'enregistrer un code de sortie non nul pour le processus. Même les programmes basés sur Eclipse renvoient 1 s'ils échouent au démarrage. Les programmes exécutés par la norme java.exe
, cependant, renvoient heureusement zéro, peu importe à quel point ils se terminent brusquement, sauf si le programme appelle System.exit()
avec une valeur de sortie. Même AssertionFailedError
ou UnsatisfiedLinkError
sont signalés au programme appelant comme des sorties réussies.
Bien sûr, tous les systèmes n'ont pas de codes de retour de programme, mais Unix et Windows étaient suffisamment importants pour garantir java.lang.Process.exitValue()
les processus enfants; ne garantissent-ils pas également le respect des conventions pour les processus parents?
Est-ce une faille dans la conception du langage ou simplement dans la mise en œuvre? Y a-t-il un argument selon lequel c'est une bonne idée?
la source
java
commande dans Java 6 et Java 7 semble répondre avec un code de sortie différent de zéro si une exception non interceptée est levée.Réponses:
Si la spécification du langage Java ne définit pas explicitement la valeur de sortie à attendre, elle n'est pas définie et vous ne devez pas vous y fier.
Vous devez intercepter Throwable dans votre méthode principale et appeler System.exit (1) vous-même.
la source