尝试访问Java程序启动的(服务器)程序时发生权限错误

时间:2010-04-26 18:25:07

标签: java process fork

我正在使用Runtime.getRuntime()。exec(“path / mmserver”)启动服务器应用程序(通常是从Unix命令行启动)。我现在的问题是,只要启动该服务器的Java程序运行,服务器就可以正确访问(从命令行和其他程序)。但是当我的Java程序退出时,服务器不再可访问(服务器的进程仍在运行)。我在尝试访问服务器时收到这样的错误消息:“错误:permission_error(flush_output(user_output),write,stream,user_output,errno(32))”。 服务器是我的黑盒子。

我只是在寻找其他方法来启动新流程。也许有人有一个提示,为什么我得到了这个权限错误(即使一个人不知道那个服务器到底是什么......你宁愿不知道它。)

1 个答案:

答案 0 :(得分:0)

我猜你的服务器程序正在尝试写入标准输出或者标准错误(Java术语中的System.out / System.err),它隐含地从你的Java程序继承但是变成了南瓜当你的Java程序消失时。

一个简单的解决方案可能是你的Java程序exec一个shell脚本,它将服务器作为后台进程启动(使用START(Windows)或&(Unix))显式重定向的I / O流。

Java库最近获得了Process类(我认为)的一些不错的更新,允许你对流进行大量的调整,但我没有太多的经验,所以我可以'提供详细的建议。


编辑:我从中段开始的建议。未经测试,抱歉!

档案server-runner.sh

#!/bin/bash
/path/mmserver >/dev/null &

当然,你需要chmod +x server-runner.sh

然后,从您的Java程序中,exec脚本server-runner.sh而不是mmserver

如果您要杀死mmserver,则必须在ps -ux中找到它并在进程号上使用kill