Как мне обычно завершить процесс, созданный ProcessBuilder?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как мне обычно завершить процесс, созданный ProcessBuilder?

Сообщение Anonymous »

Я создаю процессы с помощью ProcessBuilder на Java. Созданный процесс выполняет некоторые команды FFmpeg, которые копируют потоки RTSP в медиафайл:

Код: Выделить всё

ProcessBuilder builder = new ProcessBuilder("ffmpeg", "-i", RTSP_URL, "-f", fileFormat, destFilePath);
Process processToExecute = builder.start();
Я хочу закрыть процесс до того, как он завершит выполнение. Если я запущу эту команду FFmpeg в командной строке Windows и нажму CTRL+C через 5 секунд, то процесс завершится со статусом «2», и я смогу воспроизвести созданный на данный момент файл.
В Java с использованием процесса.destroy(); я получаю код состояния «1», что означает ненормальное завершение. Я получаю статус:

Код: Выделить всё

 processToExecute.destroy();
processToExecute.exitValue(); //This return me status '1'
Я не могу воспроизвести файл из-за аварийного завершения. Как я могу завершить процесс, созданный с помощью ProcessBuilder, так же, как и из командной строки, чтобы я мог воспроизвести созданный файл?
Когда я пытаюсь удалить файл после его завершения, я получаю:

Действие не может быть выполнено, поскольку файл открыт в FFMPEG.exe

Это означает, что процесс не завершает команду. Он все еще занимает этот файл, поэтому я не могу его воспроизвести. Процесс завершается, когда я вызываюprocessToExecute.destroy();, но задача все еще активна.
Если я нажимаю CTRL+C или Q в командной строке, она успешно завершается и не отображается в списках процессов. Когда я программно вызываю cmd>processToExecute.destroy();, он завершается, но я все еще вижу его в списке выполняющихся процессов, точно так же, как когда я завершаю это с помощью Taskkill или kill в другой командной строке, указав имя или PID (завершается ненормально). Я использую команду Tasklist, чтобы убедиться, что метод Destroy() из приложения и команда Taskkill или Kill не завершает процесс обычно, как это делает CTRL+C или Q.

Подробнее здесь: https://stackoverflow.com/questions/279 ... essbuilder
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»