我遇到了一些奇怪的問題。Java - 如何檢查另一個(非Java)進程是否在Linux上運行
我們正在使用Xvfb虛擬桌面管理器,並希望確保它在我繼續之前運行。使用純粹的外殼,我可以很容易地做到這一點:
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 –