apache进程框架commons-exec,Java
Posted zhangphil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache进程框架commons-exec,Java相关的知识,希望对你有一定的参考价值。
apache进程框架commons-exec,Java
pom.xml引用:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
import org.apache.commons.exec.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Map;
public class Main
private static long processId = -1;
public static void main(String[] args)
//无止境ping,但会再下面被ExecuteWatchdog设置的超时值终止进程而中断
CommandLine commandLine = CommandLine.parse("ping 127.0.0.1 -t");
DefaultExecutor executor = new DefaultExecutor()
@Override
protected Process launch(CommandLine command, Map<String, String> env, File dir) throws IOException
Process process = super.launch(command, env, dir);
processId = process.pid();
System.out.println("进程id=" + processId);
return process;
;
executor.setExitValues(null);
//如果进程运行时间超过timeOut毫秒,进程就自动结束(销毁)
long timeOut = 5000;
ExecuteWatchdog watchdog = new ExecuteWatchdog(timeOut);
executor.setWatchdog(watchdog);
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
final ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream);
executor.setStreamHandler(streamHandler);
ExecuteResultHandler erh = new ExecuteResultHandler()
@Override
public void onProcessComplete(int exitValue)
// exitValue 0 表示进程任务正常完成后结束退出。
// exitValue非0值表示异常结束进程。
System.out.println("exitValue:" + exitValue);
try
String os = outputStream.toString("GBK");
System.out.println("onProcessComplete:" + os);
catch (Exception e)
e.printStackTrace();
@Override
public void onProcessFailed(ExecuteException e)
e.printStackTrace();
try
String es = errorStream.toString("GBK");
System.out.println("onProcessFailed:" + es);
catch (Exception ee)
ee.printStackTrace();
;
try
executor.execute(commandLine, erh);
catch (Exception e)
e.printStackTrace();
System.out.println("end");
输出:
end
进程id=27652
exitValue:1
onProcessComplete:
正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
以上是关于apache进程框架commons-exec,Java的主要内容,如果未能解决你的问题,请参考以下文章