Wie kann ich einen Prozess normal beenden, wenn er von ProcessBuilder erstellt wurde?Java

Java-Forum
Anonymous
 Wie kann ich einen Prozess normal beenden, wenn er von ProcessBuilder erstellt wurde?

Post by Anonymous »

Ich erstelle Prozesse mit ProcessBuilder in Java. Der erstellte Prozess führt einige FFmpeg-Befehle aus, die einen RTSP-Stream in eine Mediendatei kopieren:

Code: Select all

ProcessBuilder builder = new ProcessBuilder("ffmpeg", "-i", RTSP_URL, "-f", fileFormat, destFilePath);
Process processToExecute = builder.start();
Ich möchte den Prozess schließen, bevor die Ausführung abgeschlossen ist. Wenn ich diesen FFmpeg-Befehl in der Windows-Eingabeaufforderung ausführe und nach 5 Sekunden STRG+C drücke, wird der Prozess mit dem Status „2“ beendet und ich kann die bisher erstellte Datei abspielen.
In Java erhalte ich mit process.destroy(); den Statuscode „1“, was eine abnormale Beendigung bedeutet. Ich erhalte den Status per:

Code: Select all

 processToExecute.destroy();
processToExecute.exitValue(); //This return me status '1'
Ich kann die Datei aufgrund der abnormalen Beendigung nicht abspielen. Wie kann ich den mit ProcessBuilder erstellten Prozess auf die gleiche Weise wie über die Eingabeaufforderung beenden, damit ich die erstellte Datei abspielen kann?
Wenn ich versuche, die Datei nach dem Beenden zu löschen, erhalte ich Folgendes:

Die Aktion kann nicht ausgeführt werden, da die Datei in FFMPEG.exe geöffnet ist

Das bedeutet, dass der Prozess den Befehl nicht beendet. Es belegt immer noch diese Datei, weshalb ich sie nicht abspielen kann. Der Prozess wird beendet, wenn ich „processToExecute.destroy(); aufrufe, die Aufgabe jedoch noch aktiv ist.
Wenn ich in der Eingabeaufforderung STRG+C oder Q drücke, wird er erfolgreich beendet und ist in den Prozesslisten nicht sichtbar. Wenn ich cmd>processToExecute.destroy(); programmgesteuert aufrufe, wird es beendet, aber ich sehe es immer noch in der Liste der ausgeführten Prozesse, genau wie wenn ich dies mit taskkill oder kill in einer anderen Eingabeaufforderung durch Angabe des Namens oder der PID beende (wird abnormal beendet). Ich verwende den Befehl tasklist, um zu sehen, dass die Methode destroy() aus der Anwendung und der Befehl taskkill oder kill den Prozess nicht normal beendet, wie es STRG+C oder Q tut.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post