• apache进程框架commons-exec,Java


    apache进程框架commons-exec,Java

    pom.xml引用:

    1. <dependency>
    2. <groupId>org.apache.commonsgroupId>
    3. <artifactId>commons-execartifactId>
    4. <version>1.3version>
    5. dependency>

    1. import org.apache.commons.exec.*;
    2. import java.io.ByteArrayOutputStream;
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.util.Map;
    6. public class Main {
    7. private static long processId = -1;
    8. public static void main(String[] args) {
    9. //无止境ping,但会再下面被ExecuteWatchdog设置的超时值终止进程而中断
    10. CommandLine commandLine = CommandLine.parse("ping 127.0.0.1 -t");
    11. DefaultExecutor executor = new DefaultExecutor() {
    12. @Override
    13. protected Process launch(CommandLine command, Map env, File dir) throws IOException {
    14. Process process = super.launch(command, env, dir);
    15. processId = process.pid();
    16. System.out.println("进程id=" + processId);
    17. return process;
    18. }
    19. };
    20. executor.setExitValues(null);
    21. //如果进程运行时间超过timeOut毫秒,进程就自动结束(销毁)
    22. long timeOut = 5000;
    23. ExecuteWatchdog watchdog = new ExecuteWatchdog(timeOut);
    24. executor.setWatchdog(watchdog);
    25. final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    26. final ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
    27. PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream);
    28. executor.setStreamHandler(streamHandler);
    29. ExecuteResultHandler erh = new ExecuteResultHandler() {
    30. @Override
    31. public void onProcessComplete(int exitValue) {
    32. // exitValue 0 表示进程任务正常完成后结束退出。
    33. // exitValue非0值表示异常结束进程。
    34. System.out.println("exitValue:" + exitValue);
    35. try {
    36. String os = outputStream.toString("GBK");
    37. System.out.println("onProcessComplete:" + os);
    38. } catch (Exception e) {
    39. e.printStackTrace();
    40. }
    41. }
    42. @Override
    43. public void onProcessFailed(ExecuteException e) {
    44. e.printStackTrace();
    45. try {
    46. String es = errorStream.toString("GBK");
    47. System.out.println("onProcessFailed:" + es);
    48. } catch (Exception ee) {
    49. ee.printStackTrace();
    50. }
    51. }
    52. };
    53. try {
    54. executor.execute(commandLine, erh);
    55. } catch (Exception e) {
    56. e.printStackTrace();
    57. }
    58. System.out.println("end");
    59. }
    60. }

    输出:

    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

  • 相关阅读:
    卷积层的输出
    FileOutputStream文件字节输出流
    vue 模板、组件
    java基础---NIO
    r5 5600g和i5 12400选哪个好
    android 自学资料
    Lock使用及效率分析(C#)
    Unity之ShaderGraph如何实现积雪效果
    linux相关知识以及有关指令3
    Oracle单机版升级(11.2.0.3升级到11.2.0.4)
  • 原文地址:https://blog.csdn.net/zhangphil/article/details/127073284