转载地址:http://walsh.iteye.com/blog/449051
如何用Java来调用Windows上的wmic命令来获取系统中当前的进程信息。我的第一印象是用Runtime.exec()肯定是可以的,但一写就发现,事情并没有那么的简单。我又找到了一篇比较老的文章,仔细阅读,才明白了其中的细节。下面是一些要点:
- 等待命令执行结束用waitFor(),其返回值就是命令的返回值。
- 如果出现程序执行被挂起,没有任何反应的情况,是由于没有读取命令子进程的正常输出流或错误输出流导致缓冲区被占满,进程被锁住。这个时候需要把输出流中的内容给读出来。最好的做法是使用两个线程,分别同时读取正常输出流和错误输出流。
- 执行Windows平台上的命令时使用cmd.exe /C,如cmd.exe /C dir。
- 记得关闭命令子进程的输出流,通过Process.getOutputStream().close(),这样不会导致命令子进程被锁住。
仿照上面文章中,写了一个简单的例子。
cmd[[{/c|/k}][/s][/q][/d][{/a|/u}][/t:fg][/e:{on|off}][/f:{on|off}][/v:{on|off}]string]
参数
/c
执行string指定的命令,然后停止。
/k
执行string指定的命令并继续。
/s
修改位于/c或/k之后的string处理。
/q
关闭回显。
/d
禁用自动运行命令执行。
/a
创建美国国家标准协会(ANSI)输出。
/u
创建Unicode输出。
/t:fg
设置前景f和背景g的颜色。下表列出了可用作f和g的值的有效十六进制数字。值颜色
0黑色
1蓝色
2绿
3湖蓝色
4红
5紫色
6黄
7白色
8灰色
9浅蓝色
A浅绿色
B浅水绿
C浅红色
D浅紫色
E浅黄色
F亮白色
/e:on
启用命令扩展。
/e:off
禁用命令扩展。
/f:on
启用文件和目录名完成。
/f:off
禁用文件和目录名完成。
/v:on
启用延迟的环境变量扩展。
/v:off
禁用延迟的环境变量扩展。
string
指定要执行的命令。
/?
在命令提示符显示帮助。