Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 进行外部进程调用时的设计优化_Java_Linux_Oop_Design Patterns_Processbuilder - Fatal编程技术网

Java 进行外部进程调用时的设计优化

Java 进行外部进程调用时的设计优化,java,linux,oop,design-patterns,processbuilder,Java,Linux,Oop,Design Patterns,Processbuilder,我需要从java进程调用外部进程/脚本/cli命令。 由于这些调用将非常多,一些调用将返回运行的进程/脚本的结果,而其他调用将只运行它,因此我想知道: 有一种标准设计可以围绕Java的ProcessBuilder 这样我就不会分散在对ProcessBuilder 不断地 我可以做什么优化?例如,阅读有意义吗 从文件中删除所有cli命令,而不是保留它们,例如 代码中的最后一个字符串 你的问题有点含糊不清,无法写出准确的答案,但我有一些建议: Shell用于链接命令(管道、等待等)并编写一点逻辑代

我需要从java进程调用外部进程/脚本/cli命令。
由于这些调用将非常多,一些调用将返回运行的进程/脚本的结果,而其他调用将只运行它,因此我想知道:

  • 有一种标准设计可以围绕Java的
    ProcessBuilder
    这样我就不会分散在对
    ProcessBuilder
    不断地
  • 我可以做什么优化?例如,阅读有意义吗 从文件中删除所有cli命令,而不是保留它们,例如 代码中的最后一个字符串

  • 你的问题有点含糊不清,无法写出准确的答案,但我有一些建议:

    • Shell用于链接命令(管道、等待等)并编写一点逻辑代码。shell是解释的,很容易更新,但必须保持简单。它们可能是您系统的基本部分
    • 编写自己的
      launch
      方法来启动进程并捕获stdout和stderr(在两个线程中),以编写驱动程序的日志
    • 设计XML文件以声明方式指定:
      • 进程路径及其参数(静态参数)
      • 作业间的并行性和同步性
    • 用Java编写一个模型以反映XML流程模型(JAXB可能是一个解决方案)
    • 向模型中添加等待一组作业的功能
    • 向模型添加修饰符以动态更改参数的值
    如果我试图对你的问题进行分类,我认为主要是控制流

    要解决一个大问题,您可以使用并行性:同时启动几个进程并等待所有进程的终止:这是rendez-vous或join阶段。您可能会向另一台联网计算机启动远程命令

    如何在XML文件中指定并行性的一个好例子是:

    
    
    我可以建议你不用编程就用ANT来解决你的问题吗

    用纸和笔画一幅希望执行的图画可能会有帮助…;-)


    一些图形应用程序可能有助于绘制控制流的逻辑图。完成后,在这里发布,您将获得更准确的答案,我希望…

    请发布一些commands@Aubin:示例包括:通过
    /etc/init.d
    重新启动其他进程,执行
    ifconfig
    ,请使用remote shell来命名最重要的+1。这很有趣,但有些部分我不懂。当您提到作业时,您的意思是什么?以及
    模型是什么?我的意思是您建议从XML配置文件(甚至可能是属性文件)读取,对吗?谢谢。是的,作业是{进程+元信息,如其状态、逻辑名称等}。模型不仅仅是“配置文件”,因为它是逻辑规范,您的程序将是该规范的解释器。XML比属性文件更结构化。关于作业之间的并行性和同步,您是什么意思?我怎样才能捕捉到这一点呢?我还不确定XML文件中如何指定并行性。虽然我没有这么重的要求,但你指出了我没有考虑到的事情。
    
    <parallel>
      <wlrun ... >
      <sequential>
        <sleep seconds="30"/>
        <junit fork="true" forkmode="once" ... >
        <wlstop/>
      </sequential>
    </parallel>