当前位置: 首页 > 面试题库 >

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

羊冠玉
2023-03-14
问题内容

我对此有一些奇怪的问题。

我们正在使用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()每次都为null。

我也尝试过:

    ps -ef | grep Xvfb | grep -v grep | awk {'print $2'}

仅获取进程ID。另外,没有运气。

有没有其他人经历过这种情况或知道我在做什么错?


问题答案:

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



 类似资料:
  • 问题内容: 我发现的唯一 好 方法是: (资料来源) 但这可靠吗?它适用于每个流程和每个发行版吗? 问题答案: 毕竟,Mark的答案就是解决之道,这就是/ proc文件系统在那里的原因。对于一些复制/粘贴的东西:

  • 我使用AudioRecords API在我的应用程序中录制音频(WAV),它成功录制。但是当我在后台运行其他录制应用程序时尝试录制时,我的应用程序的行为很奇怪。 当另一台录音机正在运行时,MediaRecorder API会在尝试开始录制时引发异常,但AudioRecorder API会初始化录音机实例并且不会引发任何异常,因此我无法识别是否有任何录音机实例正在运行。 这种情况已经在三星S3的默认

  • 我正在尝试创建一个bash实用程序脚本来检查docker守护程序是否在我的服务器中运行。除了运行这样的代码之外,有没有更好的方法来检查docker守护程序是否在我的服务器中运行? 我想创建一个bash shell脚本来检查我的docker守护进程是否正在运行。如果它正在运行,那么什么也不做,但是如果它没有运行,那么就启动docker守护进程。 我的伪代码大概是这样的。我正在考虑解析我的ps -ef

  • 问题内容: 如何在 java 中检查一个 String 是否是另一个 String 的旋转? 问题答案: 假设 您要检查 str1 和 str2 是否相互旋转。 使用 str3= str1 + str1 创建一个新字符串 检查 str3 是否 包含 str2 。 如果 str3 包含 str2 则 str2 是 str1 的旋转,否则不是

  • 问题内容: 假设我有一个西服套装和四个西服套装子类别:Heart,Spade,Diamond和Club。 我有一个方法,该方法接收西装作为参数,这是一个类对象,而不是实例。更准确地说,它可能仅接收以下四个值之一:Heart,Spade,Diamond,Club。我该如何做出保证这种事情的断言?就像是: 我正在使用Python 3。 问题答案: 您可以使用像这样。

  • 问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e