【问题标题】:How to create a process in Java [closed]如何在 Java 中创建进程 [关闭]
【发布时间】:2011-01-01 15:19:46
【问题描述】:

我想在我的应用程序中创建一个进程。但是在环顾四周并从 Java 的 API 中我仍然不太明白。

基本上我想创建一个多进程应用程序。但新进程是我应用程序中的一个类。

我知道你们中的一些人可能会问为什么不创建一个线程?因为类是调用matlab代码,问题和Java类是Here

有什么办法吗?

【问题讨论】:

  • 请注意,您链接的答案确实不说您需要一个单独的过程。你可以使用一个线程,你只需要确保你只在一个线程中使用 MATLAB。
  • 好吧,它不适合我。您是否阅读了我在该线程上发布的链接?从我从文章中的理解来看,我确实需要一个过程。除非你能指出我正确的方向。

标签: java


【解决方案1】:

也许java.lang.Process 可以在这里提供帮助..

ProcessBuilder.start() 和 Runtime.exec 方法创建一个本地进程并返回一个 Process 子类的实例,该实例可用于控制进程并获取有关它的信息。 Process 类提供了执行进程输入、执行输出到进程、等待进程完成、检查进程退出状态以及销毁(杀死)进程的方法。

【讨论】:

  • 他的问题不是关于 java.lang.Process,而是如何编写一个可以克隆自己的应用程序。
  • @Aaron:是什么让你相信发布者希望应用程序“克隆自己”?这甚至意味着什么?像 Unix 中的 fork() 之类的东西?
  • @sleske:Aaron 几乎是对的,我想在我的代码中将一个类作为一个进程运行,而将其余类作为另一个进程运行。在某种意义上它的 fork()。
  • @HH:请不要在 *nix 机器上调用 Runtime.exec,我想 ProcessBuilder.start() 这是一个 fork()。那就是您的 java 进程经历了一个 fork() 以创建新进程。
【解决方案2】:

只有一种方法可以在 Java 中创建进程,Runtime.exec() - 基本上它允许您像通过命令行界面一样启动新的 JVM。

【讨论】:

  • 所以这意味着我需要将代码编译为单独的应用程序并调用它?
  • 它允许您启动任何系统进程,而不仅仅是一个新的 JVM,除非那是您想要启动的新进程。
  • @HH:正如我所说,您可以像通过命令行启动任何 Java 程序一样启动它:“java -cp classpath package.name.MainClass”。但是“将代码编译为单独的应用程序”没有多大意义,当然需要编译,但Java并没有真正将“应用程序”作为不同实体的概念。
  • 嗨,Michael,您在回答中没有提到“ProcessBuilder”,这是在 java 中创建进程的另一种方式。
  • @mohammadshamsi, I have
【解决方案3】:

如果你想要更细粒度的控制,你可以使用ProcessBuilder——这个类允许你设置环境变量和配置项目的管道(stdout、in、err)。

配置完成后,您可以根据需要多次调用ProcessBuilder#start() 以创建新进程(它返回Process 的实例)。您可以在对start() 的这些调用之间更改新进程的配置。

【讨论】:

    【解决方案4】:

    我猜你知道如何创建一个新进程。如果没有,请参阅 here 或 here。

    现在您需要使用当前的类路径运行 java.exe。您可以在系统属性java.class.path 中找到这个类路径。要找到java.exe,请查看new File( System.getProperty("java.home"), "bin")。

    如果您对这种方法有疑问,我建议编写一个包装脚本并使用足够的参数调用它,以便main() 中的代码可以决定调用哪个实际类。

    【讨论】:

    • 系统属性java.class.path不包含java.exe,你的意思应该是java.home/bin。
    • @AndreasÅgren:文字正确但令人困惑。改进它。
    【解决方案5】:

    我的建议是看一下zt-exec:https://github.com/zeroturnaround/zt-exec

    它封装了java.lang.ProcessBuilder和Apache Commons Exec,可以轻松管理进程生命周期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多