使用apache的commons.cli解析命令行参数
Java Code:
package test.helloworld.cmd;
// fallseir 2010-03-26
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class Cli {
/**
* @param args
*/
public static void main(String[] args) {
GnuParser parser=new GnuParser();
Options opts=getCmdOptions();
CommandLine line=null;
try {
line=parser.parse(opts,args);
} catch (ParseException e) {
//e.printStackTrace();
System.err.println(e.getMessage());
HelpFormatter helper=new HelpFormatter();
helper.printHelp("cmdLineSyntax", opts);
}
if(line==null) return ;
if(line.hasOption("h")){
HelpFormatter helper=new HelpFormatter();
//helper.printHelp("cmdLineSyntax", opts);
helper.printHelp(80, "tester", "header", opts, "footer");
return;
}
boolean debug=false;
if(line.hasOption("debug")){
debug=true;
System.out.println("debug is set");
}
if(line.hasOption("arg")){
String arg=line.getOptionValue("arg");
System.out.println("arg "+arg);
}
}
private static Options getCmdOptions() {
Options options=new Options();
Option opt=OptionBuilder.create("debug");
options.addOption(opt);
opt=OptionBuilder.isRequired()
.hasArg()
.withArgName("arg")
.withDescription("arg description")
.withLongOpt("argument")
.withValueSeparator()
.create("arg");
options.addOption(opt);
options.addOption(new Option("h","help",false,"print help"));
return options;
}
}
Signal Shell下基于信号的应用通信
使用 sun.misc.Signal ,但 sun 已经提示Signal将在其后版本剥离
建议使用 socket 进行通信吧
package test.helloworld.cmd;
// fallseir 2010-03-26
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class SignalHandle {
public static void main(String args[]){
System.out.println("start");
SignalHandle cmd=new SignalHandle();
if(cmd.isLinux()){
cmd.installSignalHandler("QUIT");
cmd.installSignalHandler("HUP");
cmd.installSignalHandler("USR1");
cmd.installSignalHandler("USR2");
cmd.installSignalHandler("PIPE");
}
cmd.installSignalHandler("TERM");
cmd.installSignalHandler("ABRT");
cmd.installSignalHandler("INT");
try{
Thread.sleep(1000*10*10);
}catch(InterruptedException e){
e.printStackTrace();
}
}
private void handleSignal(String signal){
System.out.println("handleSignal "+signal);
}
private boolean isLinux() {
return System.getProperty("os.name").indexOf("Linux")>=0;
}
private void installSignalHandler(String signal){
System.out.println("installCheckSignal "+signal);
SimpleSignalHandler shandler=new SimpleSignalHandler();
try{
SignalHandler old = Signal.handle( new Signal( signal ), shandler);
shandler.setOld(old);
}catch(Exception e){
System.err.println("installShutdownSignal "+signal+" "+e);
}
}
class SimpleSignalHandler implements SignalHandler{
SignalHandler old=null;
public SimpleSignalHandler() {
}
public void handle( Signal sig ) {
try{
System.out.println("Handle Signal "+sig.getName() );
handSignal(sig);
if( old != null && old != SIG_DFL && old != SIG_IGN ) { //chain back to previous handler if one exists
old.handle( sig );
}
}
catch( Throwable t ) {
System.out.println(String.format("ShutdownSignalHandler.handle %s : %s",sig.getName(),t.getMessage())+t);
}
}
protected void handSignal(Signal sig) {
handleSignal(sig.getName());
}
public void setOld(SignalHandler old){
this.old=old;
}
}
}
