我正在使用Runtime.getRuntime()。exec(“path / mmserver”)启动服务器应用程序(通常是从Unix命令行启动)。我现在的问题是,只要启动该服务器的Java程序运行,服务器就可以正确访问(从命令行和其他程序)。但是当我的Java程序退出时,服务器不再可访问(服务器的进程仍在运行)。我在尝试访问服务器时收到这样的错误消息:“错误:permission_error(flush_output(user_output),write,stream,user_output,errno(32))”。 服务器是我的黑盒子。
我只是在寻找其他方法来启动新流程。也许有人有一个提示,为什么我得到了这个权限错误(即使一个人不知道那个服务器到底是什么......你宁愿不知道它。)
答案 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
。