Brechen eines Prozesses ab, der normalerweise mit ProcessBuilder erstellt wurde

Ich erstelle Prozesse mit ProcessBuilder in meiner Java-Anwendung. Der erstellte Prozess führt einige FFMPEG-Befehle aus, mit denen die RTSP-Streams in die angegebene Zielmediendatei kopiert werden.

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 direkt in Windows CMD ausführe und dann nach 5 Sekunden 'STRG + C' drücke, wird der Prozess mit dem Status '2' beendet. Und ich kann die bisher erstellte Mediendatei abspielen.

So, wenn ich den gleichen Vorgang in meiner Java-Anwendung durchführe:

 process.destroy(); //I call this method after 5 sec

Ich erhalte den Statuscode '1', was eine abnormale Beendigung bedeutet. Ich erhalte den Status folgendermaßen:

 processToExecute.destroy();
 processToExecute.exitValue(); //This return me status '1'

Und ich kann die Mediendatei nicht abspielen und denke, dies liegt an der abnormalen Beendigung des Vorgangs.

Wie kann ich den mit ProcessBuilder erstellten Prozess auf die gleiche Weise wie in CMD mit (STRG + C) beenden, damit ich die erstellte Mediendatei wiedergeben kann?

Ich möchte den Prozess (der mit ProcessBuilder erstellt wurde) in der Java-Anwendung mit dem Statuscode '2' beenden, den ich erhalte, wenn ich den Prozess mit CMD beende.

EDIT # 01: --- Ergebnisse teilen

Wenn ich versuche, diese Datei nach dem Beenden der App zu löschen, wird der folgende Fehler angezeigt:

The Action Can't be Performed Because File is Opened in FFMPEG.exe

Was bedeutet, dass der Prozess den ausgeführten Befehl nicht beendet. Dieser Befehl hat diese Datei immer noch belegt, deshalb kann ich sie nicht abspielen. Der Prozess wird beendet, wenn ich anrufe:

 processToExecute.destroy();

Aber die von ihm ausgeführte Aufgabe (dh die Ausführung eines Befehls) ist noch aktiv. Seltsam!!!

EDIT # 02: Teilen der ultimativen Vernunft

Actually Wenn ich direkt 'STRG + C' oder 'q' in cmd drücke, während der Prozess ausgeführt wird, wird der Prozess erfolgreich beendet und dieser Prozess ist in den derzeit ausgeführten Prozesslisten nicht mehr sichtbar.

nd programmatisch, wenn ich method aufrufe:

cmd> processToExecute.destroy();

Es beendet den Prozess, aber wenn ich die Liste der aktuell ausgeführten Prozesse sehe, kann ich sie immer noch dort sehen.

Und es gibt dasselbe Szenario. Wenn ich versuche, diesen Prozess mit dem Befehl 'taskkill' oder 'kill' in einer anderen CMD zu beenden, indem ich den Namen oder die PID der CMD angibt, wird der Prozess immer noch abnormal beendet.

P.S. Ich benutze den folgenden Befehl, um die laufenden Prozesse zu sehen:

tasklist

So beweist dies, dass die destroy () -Methode von Application und der Befehl 'taskkill or kill' von einer anderen CMD den Prozess nicht normal beenden, wie es das Drücken von 'CTRL + C' und 'q' tut.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage