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

在我的Java项目中,我需要运行VLC媒体播放器(用于蒸汽),并根据要求,我想停止stream媒体。 在Linux中,我创build了以下bash脚本,它使用一些参数运行VLC进程,然后将其ID输出到标准输出:

cvlc $@ & echo $! 

然后我有以下的java代码运行脚本,并从标准input读取它的ID:

 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); } 

当我想停止stream式传输时,我将使用相应的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

你可以使用某种标识符作为附加参数运行你的进程,然后select from Win32_Process where ...执行WMI select from Win32_Process where ...并将条件放入where子句中。 但是,你再也不需要这个了。

使用这种方法: 如何获得Windows中运行的应用程序的PID?

然后使用PID调用它:

 Runtime.getRuntime().exec("taskkill /F /PID " + PID_To_Be_Killed);