gpt4 book ai didi

Java - 如何检查另一个(非 Java)进程是否正在 Linux 上运行

转载 作者:IT王子 更新时间:2023-10-29 00:53:27 25 4
gpt4 key购买 nike

我遇到了一些奇怪的问题。

我们正在使用 Xvfb 虚拟桌面管理器,并希望在我继续之前确保它正在运行。使用纯 shell,我可以轻松地做到这一点:

    ps -ef | grep Xvfb | grep -v grep

这正是我所需要的,一行包含有关 Xvfb 过程的信息。接下来,我想将其合并到我的 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。另外,运气不好。

有没有其他人遇到过这种情况或知道我做错了什么?

最佳答案

您正在尝试使用“|”这是 shell 特有的管道函数,因此你不能在 java 进程中执行它。您可以尝试使用 pidof Xvfb 获取进程 ID。

关于Java - 如何检查另一个(非 Java)进程是否正在 Linux 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com