2012-03-27 38 views
1

Java中是否有可用于查询作业的API?换句话说,我正在寻找api的“工作”命令,以便我可以了解作业的状态(runningstopped等)。理想情况下,我希望能够提交工作,但我认为它可以通过调用shell和通过轻松实现&适用于Java的Linux shell作业API

+0

什么样的工作? – xxpor 2012-03-27 05:10:54

+0

就像你通过在Linux命令的末尾附加'&'提交的那些 – user837208 2012-03-27 05:12:55

+2

那些不是作业,它们是在后台运行的进程。 – xxpor 2012-03-27 05:18:11

回答

1

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

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; 
    } 
} 
1

我认为你在找什么是java.lang.process,但它实际上不能返回状态(运行,停止等),而是只能返回输出(err,std)或退出值。

+0

这似乎只适用于当前正在运行的进程。从他/她的问题来看,他们似乎想知道一个任意PID的过程。 – xxpor 2012-03-27 05:18:53

+0

据我所知,没有内置API来查询PID进程。但是因为你可以像'ps'一样调用shell任务并获得输出,所以它不应该很难用Java存档。 – 2012-03-27 05:33:15

+0

我的担忧只是因为Java试图跨平台,他们会故意难以实现,因为流程管理非常依赖底层平台。 – xxpor 2012-03-27 05:35:46

1

可以通过ProcessBuilder /运行时apis调用Shell命令。除此之外,没有Java API。 (I doubt即使是C api也存在,如果是这样,你可以使用JNI和控制进程)