在我的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);