PIDを得る
java codes
public class StandAloneServer {
static public final int PORT = 8182;
private final AutopubStore store = new CassandraAutopubStore();
private final Component component = new Component();
/** launch */
public StandAloneServer() throws Exception {
AutopubResource.setStorage(store);
System.out.println("Starting REST server on http://"
+ InetAddress.getLocalHost().getHostAddress() + ":" + PORT
+ "/");
component.getServers().add(Protocol.HTTP, PORT);
component.getDefaultHost().attach(new OpenAutopub());
component.getDefaultHost().attach("/resources",new StaticResourceApplication());
component.getClients().add(Protocol.CLAP);
component.start();
}
public void stop() throws Exception {
component.stop();
store.close();
}
/** entry point */
static public void main(String[] args) throws Exception {
String option="start";
if (args.length !=0){
option=args[0];
}
if ("start".equals(option)) {
new StandAloneServer();
String pid=getCurrentPid();
System.out.println(pid);
savePid(pid);
} else if("stop".equals(option)){
String pid = getPid();
killPid(pid);
savePid(null);
}
}
public static String getCurrentPid() throws IOException,InterruptedException {
Vector<String> commands=new Vector<String>();
commands.add("/bin/bash");
commands.add("-c");
commands.add("echo $PPID");
ProcessBuilder pb=new ProcessBuilder(commands);
Process pr=pb.start();
pr.waitFor();
if (pr.exitValue()==0) {
BufferedReader outReader=new BufferedReader(new InputStreamReader(pr.getInputStream()));
return outReader.readLine().trim();
} else {
System.out.println("Error while getting PID");
return "";
}
}
public static void savePid(String pid) throws IOException{
File f = new File("pid");
if(pid ==null){
FileWriter fw=new FileWriter(f);
fw.write("");
fw.close();
} else{
if (f.exists() && f.length()>0) {
System.out.println("there is exsiting server running");
}
FileWriter fw=new FileWriter(f);
fw.write(pid);
fw.close();
}
}
public static String getPid() throws IOException{
File f = new File("pid");
if (!f.exists()) return null;
BufferedReader br = new BufferedReader(new FileReader(f));
String pid=br.readLine();
br.close();
return pid;
}
public static void killPid(String pid) throws IOException{
Vector<String> commands=new Vector<String>();
commands.add("/bin/bash");
commands.add("-c");
commands.add("kill "+pid);
ProcessBuilder pb=new ProcessBuilder(commands);
Process pr=pb.start();
}
}
ant build.xml
<target name="startup" depends="compile" >
<java classname="com.hp.hpl.miul.openautopub.app.StandAloneServer" fork="true">
<arg line="start"/>
<classpath>
<path refid="classpath"/>
<pathelement location="target/ant-classes"/>
<pathelement location="src/main/resources"/>
<!--run functional test case -->
<pathelement location="src/test/resources"/>
</classpath>
</java>
</target>
<target name="shutdown" depends="compile">
<java classname="com.hp.hpl.miul.openautopub.app.StandAloneServer">
<arg line="stop"/>
<classpath>
<path refid="classpath"/>
<pathelement location="target/ant-classes"/>
<pathelement location="src/main/resources"/>
<!--run functional test case -->
<pathelement location="src/test/resources"/>
</classpath>
</java>
</target>