2012-11-02 19 views

Odpowiedz

9

Jeśli kod Java wychodzi z System.exit(status) można uzyskać jego status w Bash tak:

Java:

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

Bash:

$ java E 
$ echo $? 
42 

$? to kod zakończenia ostatniego ukończonego procesu.

+0

Czy istnieje inny sposób przechwytywania statusu, ponieważ w java System.exit() nie jest normalną drogą do wyjścia. – vino

+1

można przechwytywać status za pomocą echo $ ?, nawet jeśli program java nie wychodzi z System.exit(), domyślnie zwraca 0 (oznacza sukces) statusu do Systemu Operacyjnego przy normalnym wyjściu z programu. – Stauz

2

Program java powinien kończyć się Sytem.exit (status). Ten numer jest zwracany jako dowolne inne polecenie w systemie operacyjnym.

0

Zgodnie z informacjami innych użytkowników należy użyć numeru System.exit(), aby uzyskać żądane wyjście. Powodem tego jest to, że System.exit() bezpośrednio ogranicza programy i kończy zwracanie wartości zgodnie z definicją.

Jeśli zastanawiasz się, dlaczego nie mogliśmy niczego powrót z metody main, odpowiedź brzmi - w java main metoda nigdy nie zwraca nic, jeśli analizować złoty wymaganego oświadczenia

public static void main() 

można zobaczyć, w java main ma typ zwrotu jako void.

Tak więc, jeśli sprawdzasz status powrotu programu java z programu wywołującego (w tym przypadku Shell), próbujesz odczytać rzeczywisty stan wyjścia z jvm, a nie z twojego programu java, który byłby normalny warunek jest zawsze zerowy (0), nawet trudny, jeśli program ulegnie awarii z powodu jakiegokolwiek wyjątku. Otrzymasz niezerowy status wyjścia tylko wtedy, gdy jvm ulegnie awarii z powodu nieoczekiwanych przyczyn, takich jak OutOfMemory lub coś podobnego krytycznego.

Mam nadzieję, że pomaga to w zrozumieniu sposobu przechwytywania statusu wyjścia programu java.

Powiązane problemy