Java &引用;注入;将命令导入正在运行的进程

Java &引用;注入;将命令导入正在运行的进程,java,linux,input,fork,pid,Java,Linux,Input,Fork,Pid,我制作了一个Perl脚本来启动Java游戏服务器,Java-jar somejar.jar>/dev/null 2>&1& 它正常启动和运行,但我希望能够将命令“注入”到正在运行的服务器控制台中(以停止重新启动等),因为通过killall或^C终止它是危险的 正常运行时,服务器会显示一个用户活动日志和一个输入命令的区域,这就是我想“注入”文本的地方 这可能吗 谢谢! Justin如果不调整Java应用程序,那么这样做是不合理的。更改应用程序,使其既可以从输入控制台读取命令,也可以从套接字读取命令

我制作了一个Perl脚本来启动Java游戏服务器,
Java-jar somejar.jar>/dev/null 2>&1&

它正常启动和运行,但我希望能够将命令“注入”到正在运行的服务器控制台中(以停止重新启动等),因为通过killall或^C终止它是危险的

正常运行时,服务器会显示一个用户活动日志和一个输入命令的区域,这就是我想“注入”文本的地方

这可能吗

谢谢!
Justin

如果不调整Java应用程序,那么这样做是不合理的。更改应用程序,使其既可以从输入控制台读取命令,也可以从套接字读取命令。创建一个侦听传入连接的服务器套接字,读取数据并将其解释为命令。从Perl脚本或任何要执行命令的地方,连接到服务器套接字的侦听端口,并将命令字符串写入套接字

您甚至可以创建一个对“命令源”不可知的干净抽象


请注意,有一个受限API允许您捕获和解释POSIX信号,但它是隐藏的,可能不应使用。

如中所述,将stdin绑定到FIFO将不起作用,因为每次将新命令传递到FIFO后,您的服务器进程都会看到一个单独的EOF。我猜最简单的解决方案是在中运行服务器。更好但技术性更强的解决方案是修改服务器,使其通过套接字等方式接受命令。

因此应用程序只公开一个交互界面?你能详细说明一下吗?没有批处理模式或命令行功能?您使用的是Linux还是Windows?这是在CentOS 5.5 64位上运行的,带有官方Sun/Oracle JVM,控制台的上部包含游戏日志,底部包含一行输入命令。输入行似乎并不特别,因为当新项目出现在游戏日志中时,您的命令会随之滚动,即使它会随着日志滚动,完整的命令也会在按enter键后执行。如果通过屏幕运行,我如何才能将命令插入控制台?