【问题标题】:Linux shell jobs api for Java适用于 Java 的 Linux shell 作业 api
【发布时间】:2012-03-27 04:59:02
【问题描述】:

在 Java 中是否有任何 API 可用于查询作业?换句话说,我正在寻找“jobs”命令的 api,以便我可以了解作业的状态(running、stopped 等)。理想情况下,我希望能够提交作业,但我认为可以通过调用 shell 并传递 & 来轻松实现@

【问题讨论】:

  • 就像你提交的一样,在 Linux 中的命令末尾附加 &
  • 那些不是作业,那些是在后台运行的进程。

标签: linux api jobs java


【解决方案1】:

如果你有/develop - shell 脚本来处理 Job ,那么你可以使用 java.lang.process apis 来执行那个 shell 脚本,看看它是否能满足你的目的。您还可以将参数与参数一起传递。以下是代码 sn-ps 可能对您有用。

import java.io.IOException;
import java.io.InputStream;


public class MYProcess
{
   int startProcess()
   {
      String cmd = "/opt/test/bin/mystart.sh"

      // create a process for the shell
      ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
   // use this to capture messages sent to stderr
      pb.redirectErrorStream(true);                                      
      Process shell = null;
      int shellExitStatus =-1;     
      try
      {
         shell = pb.start();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
      InputStream shellIn = shell.getInputStream();
      try
      {
         shellExitStatus = shell.waitFor();
         //logger.info("call exit status:" + shellExitStatus);
         //logger.info("If exit status is not zero then call is not successful. Check log file.");        
      }
      catch (InterruptedException e)
      {
         //logger.error("error while call" + e);
         e.printStackTrace();
      } // wait for the shell to finish and get the return code
      return shellExitStatus;
   }
}

【讨论】:

    【解决方案2】:

    我认为您正在寻找的是 java.lang.process,但它实际上不能返回状态(运行、停止等),而只能返回输出(错误、标准)或退出值。

    【讨论】:

    • 这似乎只适用于当前正在运行的进程。从他/她的问题来看,他们似乎想知道一个具有任意 PID 的进程。
    • 据我所知,没有内置的API可以通过PID查询进程。但是,由于您可以调用像“ps”这样的 shell 任务并获取输出,因此在 Java 中归档它应该不难。
    • 我的担心只是因为Java试图跨平台,他们会故意让这样的事情变得困难,因为进程管理非常依赖于底层平台。
    【解决方案3】:

    Shell 命令可以通过ProcessBuilder/Runtime api 调用。除此之外没有java api。 (我doubt 连 C api 都存在,如果是的话你可以使用 JNI 和控制进程)

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2016-01-02
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多