在我的 java 项目中,我需要运行 VLC Media Player(用于流式传输),并且根据要求我想停止流式传输。 在 Linux 中,我创建了以下 bash 脚本,它使用一些参数运行 VLC 进程,然后将其 ID 输出到标准输出:
cvlc $@ &
echo $!
然后我有以下运行脚本并从标准输入读取它的 ID 的 java 代码:
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);
}
当我想停止流媒体时,我会杀死对应ID的进程:
Runtime.getRuntime().exec("kill " + lastPID);
有什么方法可以在 Windows 7(cmd.exe 或 Windows PowerShell)中编写等效脚本?或者,有没有一种方法可以编写运行进程的纯(独立于平台的)java 代码,然后获取它的 ID 并停止它?
最佳答案
有办法。但是为什么不尝试使用纯 Java API 终止进程呢?用户 process.destroy()
。这与 kill PID
完全一样。
要获取进程 ID,您可以使用 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 子句中。但同样,你实际上不需要这个。
关于java - 在 Windows 7 中运行进程并获取其 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030858/