2012-11-02 15 views

risposta

9

Se il codice Java esce con System.exit(status), è possibile ottenere lo stato in Bash come questo:

Java:

public class E { 
    public static void main(String[] args) { 
     System.exit(42); 
    } 
} 

Bash:

$ java E 
$ echo $? 
42 

$? è lo stato di uscita dell'ultimo processo finito.

+0

C'è un altro modo per acquisire lo stato poiché in Java System.exit() non è il modo normale per uscire. – vino

+1

è possibile rilevare lo stato utilizzando echo $?, Anche se il programma java non termina con System.exit(), per impostazione predefinita restituisce lo stato 0 (significa Success) al sistema operativo all'uscita normale del programma. – Stauz

2

il programma java dovrebbe terminare con Sytem.exit (stato). Questo numero viene restituito come qualsiasi altro comando nel sistema operativo.

0

Come altri hanno affermato, è necessario utilizzare System.exit() per ottenere l'output desiderato. La ragione di ciò è che System.exit() dirina direttamente i programmi ed esce restituendo il valore come definito.

Se vi stavate chiedendo il motivo per cui non siamo riusciti a restituire nulla dal metodo main, la risposta è - in java main metodo non ritorna mai nulla, se si analizza la dichiarazione d'oro richiesto

public static void main() 

si vedrebbe, in Java main ha un tipo di ritorno come void.

Quindi, se si sta verificando lo stato di ritorno di un programma java dal programma chiamante (Shell in questo caso), si sta tentando di leggere effettivamente lo stato di uscita di jvm e non del proprio programma java che sarebbe normale condizione essere sempre uguale a zero (0) anche se si programma in modo anomalo a causa di qualsiasi eccezione. Si otterrebbe uno stato di uscita diverso da zero solo se il jvm si arresta a causa di motivi imprevisti come OutOfMemory o qualcosa di simile critico.

Spero che questo aiuti a comprendere lo stato di uscita del programma java.

Problemi correlati