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

AWT*_*AWT 4 java unix linux grep process

我有一些奇怪的问题.

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

    ps -ef | grep Xvfb | grep -v grep
Run Code Online (Sandbox Code Playgroud)

而这正是我所需要的,一行包含有关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);
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我使用"ps -ef",当我运行我的应用程序时,我会获得一个大量的进程转储到我的控制台.但是,如果我使用| grep缩小返回的进程列表,我得到零结果.input.readLine()每次都为null.

我也尝试过:

    ps -ef | grep Xvfb | grep -v grep | awk {'print $2'}
Run Code Online (Sandbox Code Playgroud)

要抓住进程ID.而且,没有运气.

有没有其他人经历过这个或知道我做错了什么?

Max*_*Max 5

你正试图用"|" 这是一个特定于shell的管道函数,因此您无法在Java进程中执行此操作.您可以尝试使用获取进程ID pidof Xvfb.