Wie man ein SIGNAL in einer Java-Anwendung fängt, die mit einem Bash-Skript initialisiert wurde

8

Ich fange ein INT-Signal in Java mit dem folgenden Code:

%Vor%

Wenn ich java -jar file.jar verwende, um meine Anwendung zu starten, kann ich das mit kill -INT PID gesendete Signal abfangen.

Wenn ich java -jar file.jar & aufruft (jvm läuft im Hintergrund), kann ich das mit kill -INT gesendete Signal nicht abfangen.

Irgendwelche Ideen?

Danke.

    
simao 10.11.2010, 17:36
quelle

2 Antworten

3

Funktioniert für mich. Sind Sie sicher, dass Sie das richtige Pid töten? Unter Unix können Sie $! verwenden, um die PID des zuletzt gestarteten Prozesses zu erhalten.

%Vor%

Aktualisierung:

Wenn Sie dies im Hintergrund über ein Shell-Skript starten, erstellt das Betriebssystem eine neue Prozessgruppe, die immun gegen Tastatur-generierte Signale wie SIGINT ist. Nur Prozesse, deren Prozessgruppen-ID mit der Prozessgruppen-ID des aktuellen Terminals übereinstimmt, können diese Signale empfangen.

Versuchen Sie also, es in der Prozessgruppe des aktuellen Terminals wie folgt auszuführen:

%Vor%

Sie können dann SIGINT senden.

Weitere Informationen zur Jobkontrolle hier .

    
dogbane 10.11.2010 17:50
quelle
0

Ich gehe davon aus, dass das Bash-Skript SIGINT ignoriert und das Kind die Signalmaske erbt.

Schau im Bash-Skript nach so etwas. (Es kann mehr Zahlen als nur 2 geben.)

%Vor%

Die leere Zeichenfolge bewirkt, dass die Shell SIG_IGN setzt. Wenn Sie stattdessen verwenden:

%Vor%

Das registriert einen Handler, der nichts tut. Wenn ein untergeordneter Prozess gestartet wird, wird jedes Signal mit einem installierten Handler auf SIG_DFL zurückgesetzt.

    
Devon_C_Miller 10.11.2010 18:24
quelle

Tags und Links