“将”命令“注入”正在运行的进程中

时间:2011-05-09 15:41:55

标签: java linux input fork pid

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

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

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

这可能吗?

谢谢!  贾斯汀

2 个答案:

答案 0 :(得分:3)

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

您甚至可以创建一个与“命令源”无关的干净抽象。

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

答案 1 :(得分:0)

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