Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 - Fatal编程技术网

如何在Java中创建进程

如何在Java中创建进程,java,Java,我想在我的应用程序中创建一个进程。但是环顾四周,从Java的API中我还是不太明白 基本上我想创建一个多进程应用程序。但新流程在我的应用程序中是一个类 我知道你们中的一些人可能会问为什么不创建一个线程?因为这个类调用的是一个matlab代码,所以问题和Java类是一样的 有什么方法可以做到这一点吗?在Java中创建进程只有一种方法,-基本上它允许您启动一个新的JVM,就像通过命令行界面一样。这里可能会有所帮助 ProcessBuilder.start()和Runtime.exec方法创建本机进程

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

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

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


有什么方法可以做到这一点吗?

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

这里可能会有所帮助

ProcessBuilder.start()
Runtime.exec
方法创建本机进程,并返回可用于控制该进程和获取其相关信息的进程子类的实例。类流程提供了用于执行流程输入、流程输出、等待流程完成、检查流程退出状态以及销毁(终止)流程的方法


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

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


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

如果您想要更细粒度的控制,可以使用-此类允许您设置环境变量并配置项目的管道(
stdout
in
err


一旦您配置了它,您可以调用
ProcessBuilder#start()
任意次数,以创建新流程(它返回一个
Process
)的实例。您可以在这些调用之间将新流程的配置更改为
start()
我的建议是查看zt exec:


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

这意味着我需要将代码编译为一个单独的应用程序并调用它?它允许您启动任何系统进程,而不仅仅是一个新的JVM,除非这是您想要启动的新进程。@HH:正如我所说的,您可以像y一样启动它您可以通过命令行启动任何Java程序:“Java-cp classpath package.name.MainClass”。但是“将代码编译为单独的应用程序”没有多大意义,当然它需要编译,但是Java并没有真正将“应用程序”作为不同实体的概念。嗨,Michael,您没有提到“ProcessBuilder”在你的回答中,这是java中创建进程的另一种方式。@mohammadshamsi,他的问题不是关于java.lang.process,而是关于如何编写一个可以克隆自身的应用程序。@Aaron:你凭什么相信海报希望应用程序“克隆自身”?这到底是什么意思?比如fork()在Unix中?@sleske:Aaron几乎是对的,我想在我的代码中将一个类作为一个进程运行,而其余的类作为另一个进程运行。从某种意义上说,它是fork()。@HH:请不要在*nix机器上调用Runtime.exec,我想ProcessBuilder.start()这是一个fork()。这是您的java进程经历的fork()为了创建新的进程。请注意,你链接的答案并不是说你需要一个单独的进程。你可以使用一个线程,你只需要确保你只从一个线程使用MATLAB。好吧,这对我不起作用。你读了我在该线程上发布的链接了吗?根据我从文章中解释的,我真的需要一个进程。Unless您可以为我指出正确的方向。系统属性java.class.path不包含java.exe,您可能指的是java.home/bin。@AndreasÅgren:文本是正确的,但令人困惑。对其进行了改进。