Como finalizar um processo normalmente criado usando o ProcessBuilder

Estou criando processos usando ProcessBuilder no meu aplicativo Java. O processo criado executa alguns comandos FFMPEG que realmente copiam os fluxos RTSP no arquivo de mídia de destino especificado.

ProcessBuilder builder = new ProcessBuilder("ffmpeg", "-i", RTSP_URL, "-f", fileFormat, destFilePath);
Process processToExecute = builder.start();

Quero fechar o processo antes de concluir sua execução. Portanto, se eu executar esse comando FFMPEG diretamente no Windows CMD e pressionar 'CTRL + C' após 5 segundos, o processo get termina com o status '2'. E eu posso reproduzir o arquivo de mídia criado até agora.

Portanto, se eu fizer a mesma operação no meu aplicativo Java usando:

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

Recebo o código de status '1', que significa encerramento anormal. Eu recebo o status da seguinte maneira:

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

E não consigo reproduzir o arquivo de mídia e acho que isso se deve ao encerramento anormal do processo.

Então, como posso finalizar o processo criado usando ProcessBuilder da mesma maneira que fazemos no CMD com (CTRL + C) para poder reproduzir o arquivo de mídia criado?

Desejo encerrar o processo (criado usando ProcessBuilder) no aplicativo Java com o código de status '2' que recebo quando encerro o processo usando o CMD.

EDIT # 01: --- Compartilhar conclusões

Portanto, quando tento excluir esse arquivo quando o aplicativo termina, recebo o seguinte erro:

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

O que significa que o processo não está finalizando o comando que está sendo executado. Esse comando ainda ocupou esse arquivo e é por isso que não estou conseguindo reproduzi-lo. O processo é encerrado quando ligo para:

 processToExecute.destroy();

Porém, a tarefa que está executando (ou seja, a execução de um comando) ainda está ativa. Estranho!!!!

EDIT # 02: Compartilhando a razão final

Na verdade, se eu pressionar diretamente 'CTRL + C' ou 'q' no cmd quando o processo estiver em execução, ele encerrará o processo com êxito e esse processo não será mais visível nas listas de processos em execução no momento.

E programaticamente quando eu chamo método:

cmd> processToExecute.destroy();

Ele finaliza o processo, mas quando vejo a lista de processos em execução no momento, ainda os vejo por lá.

E o mesmo cenário existe Se eu tentar finalizar esse processo usando o comando 'taskkill' ou 'kill' em outro CMD, especificando o nome ou o pid do seu processo ainda finalizado de forma anormal.

P.S. Eu uso o seguinte comando para ver os processos em execução:

tasklist

Portanto, isso prova que o método destroy () do Aplicativo e o comando 'taskkill or kill' de outro CMD não estão encerrando o processo normalmente, ao pressionar 'CTRL + C' e 'q'.

questionAnswers(1)

yourAnswerToTheQuestion