【发布时间】:2012-01-15 09:26:16
【问题描述】:
我遇到了一些奇怪的问题。
我们正在使用 Xvfb 虚拟桌面管理器,并希望在我继续之前确保它正在运行。使用纯 shell,我可以轻松做到这一点:
ps -ef | grep Xvfb | grep -v grep
这正是我所需要的,一行包含有关 Xvfb proc 的信息。接下来,我想将其合并到我的 Java 程序中并解析结果并存储正在运行的 Xvfb 进程的 PID。所以我正在尝试这个:
String line;
try {
Process p = Runtime.getRuntime().exec("ps -ef | grep Xvfb | grep -v grep");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null)
{
System.out.println(line);
}
} catch (Exception err) {
System.out.println(err);
}
奇怪的是,如果我使用“ps -ef”,当我运行我的应用程序时,我会收到大量进程转储到我的控制台。但是如果我使用 | grep 缩小返回的进程列表,我得到零结果。 input.readLine() 每次都为空。
我也试过了:
ps -ef | grep Xvfb | grep -v grep | awk {'print $2'}
只获取进程 ID。另外,运气不好。
有没有其他人经历过这种情况或知道我做错了什么?
【问题讨论】:
-
使用 pgrep 代替 ps 和 2 个 greps
标签: java linux unix process grep