web-dev-qa-db-fra.com

Comment fonctionne exactement le code de sortie d'application Java Java de la méthode main ()?

J'ai les doutes suivants concernant une simple ligne de commande Java application.

J'ai donc cette application en ligne de commande qui est démarrée par une méthode main() définie dans une classe Main. Comme d'habitude, cette méthode main() est définie avec cette signature:

public static void main(String[] args) {

Son type de retour est void, et cela devrait signifier qu'il ne renvoie aucune valeur. Mais lorsque son exécution se termine correctement, j'obtiens le message suivant dans la console IntelliJ.

Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket'

Process finished with exit code 0

Que représente exactement exit code 0? Je pense que cela signifie que le programme a correctement terminé son exécution sans encourir aucune erreur.

Alors maintenant, j'ai les 2 doutes suivants:

  1. S'il est vrai, pourquoi cela se produit si ma méthode main() retourne void?

  2. Comment puis-je retourner un code de sortie différent si mon application s'est terminée avec une erreur?

Existe-t-il une valeur de code de sortie standard pour se terminer par des erreurs?

21
AndreaNobili

Le VM se ferme lorsque

  • tous les threads non démons cessent de fonctionner, ou
  • System.exit(exitCode) est appelée

Dans le premier cas, le code de sortie est 0. Dans le second cas, il s'agit du code de sortie transmis à la méthode exit().

N'oubliez pas que même si votre méthode main () revient, le programme continuera de fonctionner jusqu'à ce qu'aucun thread non-démon ne s'exécute. Et tout thread s'exécutant dans le VM peut choisir de quitter explicitement.

Le code de sortie 0 signifie que tout s'est déroulé comme prévu. vous pouvez choisir d'utiliser tout autre code de sortie pour signaler une condition exceptionnelle à l'environnement.

27
JB Nizet

Le code de sortie du processus est ce que le processus signale au système d'exploitation comme son code d'erreur.

Les concepteurs Java pourraient créer la méthode main() pour renvoyer int afin que JVM puisse rapporter au système d'exploitation cette valeur en tant que code de sortie de processus. Mais ils ont décidé de faire vide principal mais de fournir une API qui peut mettre à jour ce code en utilisant System.exit(exitCode). L'avantage de cette solution est que le programme peut décider de quitter à tout moment et dans n'importe quel thread, pas seulement dans la méthode principale et dans le thread principal.

5
AlexR

Un code de sortie de 0 signifie qu'il s'est terminé normalement, c'est-à-dire standard pour tous les processus, pas seulement Java. La valeur ne revient pas de la méthode principale (elle est nulle) mais de la JVM elle-même.

Une valeur différente peut être spécifiée, par ex. System.exit(1) pour indiquer une condition d'erreur, et le programme s'arrête.

4
NickJ