Запустите процесс и получите его идентификатор в Windows 7 - PullRequest
3 голосов
/ 07 ноября 2011

В моем Java-проекте мне нужно запустить VLC Media Player (для обработки паром), и по запросу я хочу остановить потоковую передачу.В Linux я создал следующий скрипт bash, который запускает процесс VLC с некоторыми аргументами, а затем выводит его идентификатор в стандартный вывод:

cvlc $@ &
echo $!

Затем у меня есть следующий код Java, который запускает скрипт и читает его идентификаторfrom stdin:

Process proc = Runtime.getRuntime().exec("/path/to/script");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
if(line!=null) {
    lastPID = new Integer(line);
    System.out.println("Last vlc PID=" + lastPID);
}

Когда я хочу остановить потоковую передачу, я уничтожу процесс с соответствующим идентификатором:

Runtime.getRuntime().exec("kill " + lastPID);

Есть ли способ написать эквивалентный скрипт в Windows 7 (cmd.exe или Windows PowerShell)?В качестве альтернативы, есть ли способ написать чистый (независимый от платформы) код Java, который запускает процесс, затем получает его идентификатор и останавливает его?

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Есть способ. Но почему бы вам не попробовать завершить процесс, используя чистый API Java? Пользователь process.destroy(). Это в точности как kill PID.

Для получения идентификатора процесса вы можете использовать WMI. Проверьте следующий ресурс: http://blogs.technet.com/b/heyscriptingguy/archive/2006/06/01/how-can-i-find-the-process-id-associated-with-a-batch-file.aspx

Вы можете запустить процесс с каким-то идентификатором, переданным в качестве дополнительного параметра, а затем выполнить WMI select from Win32_Process where ... и поместить критерии в предложение where. Но опять же, вам на самом деле это не нужно.

0 голосов
/ 22 июля 2015

Используйте этот метод: Как получить PID запущенного приложения в Windows?

Затем вызовите это с помощью PID:

Runtime.getRuntime().exec("taskkill /F /PID " + PID_To_Be_Killed);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...