java - 在 Windows 7 中运行进程并获取其 ID

标签 java windows linux shell process

在我的 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/

相关文章:

java - 在 JVMTI Agent 中访问线程局部变量

java - 使用 Java 刷新 Windows 上的 Internet 选项

java - 如何为自定义日志记录解决方案正确创建性能测试?

java - 如何从字符串输入中获取任意长度的整数

windows - 某些符号不会影响 cmd 命令,而其他符号会

Linux文件删除恢复

c++ - 我想复制 (wchar_t *)buffer 中的数据,但我无法这样做,因为还有其他不兼容的类型,类型转换但没有得到结果?

windows - 从 DevicePath 中提取 USB PID VID

linux - 在对文件进行一些更改后替换文件中的字符串

linux - "ant -version"返回/usr/bin/build-classpath : error: Some specified jars were not found