【发布时间】:2012-11-12 19:34:49
【问题描述】:
好的,让我再试一次。 :-)
如果我尝试:
<?php
exec("java -Xms1024M -Xmx1024M -jar craftbukkit-1.4.2-R0.2.jar -o true");
?>
网页永远不会返回。我相信这是因为 CGI 正在等待进程完成,当然它永远不会这样做,因为它是一个服务器。
我在本地尝试这个,如果我在终端中输入相同的命令,它会按预期运行,所以我知道命令行没有问题。
所以……问题是:
1) exec 在进程完成之前会阻塞吗? 2)如果不是,这里发生了什么,如果是,我该如何改变这种行为?
================================================ ===============
所以这确实是一个笼统的问题,但我已经包含在特定环境中,这可能有助于解释我为什么要这样做。这一切都在 LINUX 上。
我想从 PHP 页面远程启动 Java 进程。诀窍当然是该进程将继续运行,并且我希望在该进程成功启动后完成 PHP 页面。
那么,首先我该怎么做?我已经尝试了很多我读过的东西,但无法让它们发挥作用。
第二部分有点棘手。停止 minecraft 服务器的方式是在终端中键入“停止”。当然,你可以在那里输入其他命令来做其他事情……它只是从标准输入读取。
如果我想停止它,或者发送其他命令,我需要从 PHP 脚本连接到标准输入并发送文本或其他内容。
当我启动 java 进程时,我是否将标准输入连接到一个文件,然后从未来的 PHP 脚本写入该文件?我不知道。
请给我一些关于正确方法的建议,然后我会尝试。如果它们有效,或者我有更详细的问题,我会告诉你。
谢谢!
【问题讨论】:
-
exec('java命令行');不要说“我尝试了一些东西”而没有给我们您尝试过的确切代码。
-
PHP 在其通常的部署模型中(每个请求一个 Apache 进程)可能是一个糟糕的语言选择。我会选择...其他任何东西,真的,只要它可以让您的 Web 服务器进程通过对 Minecraft 服务器子进程的引用保持运行。
-
另外,这个问题有点太宽泛了。很明显,做你想做的事涉及几个步骤,你应该研究(然后提出问题)实施这些具体步骤。 (“如何从 PHP 启动子进程?”,“如何从 PHP 写入任意其他进程的标准输入?”。(或者关于在 PHP 中处理长时间运行的任务。)
标签: java php linux process minecraft