各位大佬好,小弟我今天遇到一个问题不知如何解决,特来向吧友求助
问题:我已经将输入/输出流重定向到了两个文件, 目前输出文件是正常的, 但是程序无法从输入文件里面读取指令。
详情:我运行的程序其实就是minecraft的服务端, 通过ssh链接的远程服务之后, 通过命令 java -jar server.jar 即可启动服务器,服务器启动后,程序会持续等待键盘输入, 如下图所示:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=5248e30f1766d0167e199e20a72ad498/d11d9313b07eca800eab5925d42397dda0448356.jpg?tbpicau=2025-02-24-05_7734861e4b2693e680b0da45f030943a)
但是这样启动的一个弊端是我无法退出当前terminal窗口,否则服务器也会停止运行,所以我将命令改为
nohup java -jar server.jar &
这样程序即在后台运行, 但是程序无法再从键盘读取输入, 因为这样的话程序的输入流会被默认修改为/dev/null
所以我又将命令改为
nohup java -jar server.jar < input > output &
这时,输出日志已经全在output file 里面,然后当我想向程序发送命令(例如 /banlist)时, 我使用
echo '/banlist' > ./input
然后, 我在input文件里面可以看到/banlist, 但是/banlist这个指令并没有被程序接收到,也没有输出
[xx:xx:xx] [Server thread/INFO] [minecraft/MinecraftServer]: There are no bans (本该有这个输出的)
所以也可以将我求助的问题改为
1. 如何向后台程序发送键盘指令 (已经试过jobs / bg / fg, 这个方法关闭一次终端, 再打开就没有用了, 因为找不到job id, 所以不能用这个办法)
2. 或者如何通过pid将后台程序带到前台 (我可以通过 ps aux | grep java 找到这个后台程序, 但是无法带到前台来。)
3. 或者如何运行minecraft服务端后,关闭terminal窗口依然可以保证minecraft服务端的运行, 同时还能在需要的时候再拿回这个进程的输入流(刚刚搜到了pseudo shell 可能可以达到类似的目的, 但是正在研究输入重定向, 如果这个无解的话,我会再研究pseudo shell的方案)。
问题:我已经将输入/输出流重定向到了两个文件, 目前输出文件是正常的, 但是程序无法从输入文件里面读取指令。
详情:我运行的程序其实就是minecraft的服务端, 通过ssh链接的远程服务之后, 通过命令 java -jar server.jar 即可启动服务器,服务器启动后,程序会持续等待键盘输入, 如下图所示:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=5248e30f1766d0167e199e20a72ad498/d11d9313b07eca800eab5925d42397dda0448356.jpg?tbpicau=2025-02-24-05_7734861e4b2693e680b0da45f030943a)
但是这样启动的一个弊端是我无法退出当前terminal窗口,否则服务器也会停止运行,所以我将命令改为
nohup java -jar server.jar &
这样程序即在后台运行, 但是程序无法再从键盘读取输入, 因为这样的话程序的输入流会被默认修改为/dev/null
所以我又将命令改为
nohup java -jar server.jar < input > output &
这时,输出日志已经全在output file 里面,然后当我想向程序发送命令(例如 /banlist)时, 我使用
echo '/banlist' > ./input
然后, 我在input文件里面可以看到/banlist, 但是/banlist这个指令并没有被程序接收到,也没有输出
[xx:xx:xx] [Server thread/INFO] [minecraft/MinecraftServer]: There are no bans (本该有这个输出的)
所以也可以将我求助的问题改为
1. 如何向后台程序发送键盘指令 (已经试过jobs / bg / fg, 这个方法关闭一次终端, 再打开就没有用了, 因为找不到job id, 所以不能用这个办法)
2. 或者如何通过pid将后台程序带到前台 (我可以通过 ps aux | grep java 找到这个后台程序, 但是无法带到前台来。)
3. 或者如何运行minecraft服务端后,关闭terminal窗口依然可以保证minecraft服务端的运行, 同时还能在需要的时候再拿回这个进程的输入流(刚刚搜到了pseudo shell 可能可以达到类似的目的, 但是正在研究输入重定向, 如果这个无解的话,我会再研究pseudo shell的方案)。