Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer le code de retour de mon appli java au système

4 réponses
Avatar
figus
Salut à tous

Je suis débutant confirmé en java, et je pense que ma question a déjà
été posée à de nombreuses reprises. J'ai bien fait quelques recherches
avec google, mais je n'ai pas trouvé de réponse.

Je m'adresse donc à vous.

J'ai une appli java (appelons-là Bidule) qui fait un certain nombre de
traitements, le choix du traitement étant spécifié en argument (par
exemple, Bidule traitement1).

J'ai un wrapper en shell, qui permet d'appeler l'appli java à
concurrence de tous les traitements possibles (par exemple, wrapper.sh
traitement1).

Chaque traitement renvoie son status via un System.exit(status).

Le problème, c'est que je n'arrive pas à récupérer le status depuis le
wrapper. J'ai l'impression que la JVM renvoie 0 quoiqu'il arrive.

Merci d'avance pour votre aide.

4 réponses

Avatar
figus
Bonjour à tous

Une petite précision sur mon problème.

Ca n'est pas tant de récupérer le code retour que je n'arrive pas à
faire, mais plutôt de récupérer la valeur que renvoie mon appli java.

En gros, si je fais un System.exit(42) dans mon appli, et que je fais :
java Bidule
echo $?

$? vaut 0 et non pas 42, comme si la JVM ne transmettait pas la valeur
au système.

Quelqu'un aurait-il une idée du pourquoi ? Et aussi du comment récupérer
la valeur de mon appli java ?

Merci.

figus wrote:
Salut à tous

Je suis débutant confirmé en java, et je pense que ma question a déjà
été posée à de nombreuses reprises. J'ai bien fait quelques recherches
avec google, mais je n'ai pas trouvé de réponse.

Je m'adresse donc à vous.

J'ai une appli java (appelons-là Bidule) qui fait un certain nombre de
traitements, le choix du traitement étant spécifié en argument (par
exemple, Bidule traitement1).

J'ai un wrapper en shell, qui permet d'appeler l'appli java à
concurrence de tous les traitements possibles (par exemple, wrapper.sh
traitement1).

Chaque traitement renvoie son status via un System.exit(status).

Le problème, c'est que je n'arrive pas à récupérer le status depuis le
wrapper. J'ai l'impression que la JVM renvoie 0 quoiqu'il arrive.

Merci d'avance pour votre aide.


Avatar
flipouk
figus wrote:
Bonjour à tous

Une petite précision sur mon problème.

Ca n'est pas tant de récupérer le code retour que je n'arrive pas à
faire, mais plutôt de récupérer la valeur que renvoie mon appli java.

En gros, si je fais un System.exit(42) dans mon appli, et que je fais :
java Bidule
echo $?

$? vaut 0 et non pas 42, comme si la JVM ne transmettait pas la valeur
au système.

Quelqu'un aurait-il une idée du pourquoi ? Et aussi du comment récupérer
la valeur de mon appli java ?
Je viens de tester le code suivant :

--------8<---------
class Bidule {
public static void main(String[] args) {
System.out.println("Doing nothing. Exiting at once.");
System.exit(42);
}
}
------->8----------
[bash]$ javac Bidule.java
[bash]$ java Bidule
Doing nothing. Exiting at once.
[bash]$ echo $?
42
Je n'arrive pas à reproduire ton problème... Quel $SHELL utilises-tu ?
Quelle version de Java ?
J'ai testé avec Java5 et bash sous Mandrake -- ou peut-être doit-on dire
"Mandriva", maintenant :(
F.

Avatar
figus
Je bosse sous Solaris 9 avec /bin/sh et le Java 1.4.2_05-b04.

Mais, je ne comprends pas, chez moi aussi maintenant ça marche ! Sans
doute un vilain tour de vendredi soir...

J'ai du changer qqch depuis mais je ne sais pas quoi.

Merci.

flipouk wrote:
Je viens de tester le code suivant :
--------8<---------
class Bidule {
public static void main(String[] args) {
System.out.println("Doing nothing. Exiting at once.");
System.exit(42);
}
}
------->8----------
[bash]$ javac Bidule.java
[bash]$ java Bidule
Doing nothing. Exiting at once.
[bash]$ echo $?
42
Je n'arrive pas à reproduire ton problème... Quel $SHELL utilises-tu ?
Quelle version de Java ?
J'ai testé avec Java5 et bash sous Mandrake -- ou peut-être doit-on dire
"Mandriva", maintenant :(
F.


Avatar
Fabrice Bacchella
On Mon, 11 Apr 2005 16:05:37 +0200, figus wrote:

Je bosse sous Solaris 9 avec /bin/sh et le Java 1.4.2_05-b04.

Mais, je ne comprends pas, chez moi aussi maintenant ça marche ! Sans
doute un vilain tour de vendredi soir...

J'ai du changer qqch depuis mais je ne sais pas quoi.


java est souvent un shell qui lance qui lance un binaire. Un shell de
plus mal ecrit dans la chaine ou un alias & ça pète tout. Un petit
'type java' peut aider à vérifier ce qui est effectivement utilisé.
Vérifiez aussi votre $PATH.
--
www.castalie.fr