Frage

Ich starte einen untergeordneten Prozess in Java wie folgt:

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

Es läuft jetzt im Hintergrund. Alles ist gut und in Ordnung.

Wenn mein Programm jetzt abstürzt (es ist noch in dev :-)) das Kind Prozess scheint noch herum zu hängen. Wie kann ich es automatisch beendet, wenn der übergeordnete Java-Prozess stirbt?

machen

Wenn es hilft, ich bin mit Mac OS X 10.5

War es hilfreich?

Lösung

Wie Sie gesagt haben, addShutdownHook ist der Weg zu gehen.

ABER:

  • Es gibt keine wirkliche Garantie, dass Ihr Shutdown-Haken ausgeführt werden, wenn das Programm beendet wird. Jemand könnte den Java-Prozess töten und in diesem Fall Ihre Shutdown-Hook wird nicht ausgeführt. (Wie gesagt in diesem SO Frage )

  • einige der Standardbibliotheken ihre eigenen Haken haben, die vor Ihnen laufen kann.

  • passen sie von Deadlocks.

Eine andere Möglichkeit wäre, Ihr Java-Programm in einem Service wickeln.

Andere Tipps

Ich arbeitete es aus mir schon. Ich füge einen Shutdown-Haken, wie folgt:

final String[] cmd = {"<childProcessName>"};
final Process process = Runtime.getRuntime().exec(cmd);
Runnable runnable = new Runnable() {
    public void run() {
        process.destroy();
    }
};
Runtime.getRuntime().addShutdownHook(new Thread(runnable));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top