有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

bash杀戮屏幕但java进程未结束

我正在运行一个脚本,它基本上运行一组服务器进行本地测试

这些JAR在不同的屏幕上运行,因为它们都需要独立地接受键盘输入。为了做到这一点,我使用了屏幕

command1="java -jar $fullPath"
screen -d -m -S "${screenName[$i]}" bash -c "$command1"

效果很好

然后我需要一种杀死所有服务器的方法

所以我写了一个脚本

for session in $(screen -ls | grep -o "[0-9]*\.${screenName[$i]}")
do
    screen -X -S "$session" quit
    echo "killing screen $session"
done

效果很好,屏幕被杀了。 但当我第二次这么做时,java突然占据了我100%的CPU

在我使用退出屏幕命令之前

The servers running normally

在我使用退出屏幕命令之后

enter image description here

他们还需要永远通过gui使用强制退出进行杀戮

enter image description here

其他信息:

  • 服务器使用的是运行在一个java线程上的Jetty。然后另一个线程就坐在那里等待键盘输入
  • 显然,这是在mac上运行的,脚本在bash中,所以我想要一个适用于mac和linux的bash解决方案
  • 它们也使用Java7构建,但使用Java8运行

因为服务器接受键盘输入,所以发送到屏幕的所有命令都被服务器接收。 他们确实有退出的输入,但我不想信任服务器退出

所以我的问题是:

  • 有没有办法让屏幕在终止时终止其中所有正在运行的进程

  • 如果没有,是否有办法将ctrl-c发送到特定屏幕

  • 如果没有,是否有办法在屏幕本身不运行命令的情况下查看特定屏幕的运行过程?(那么我可以直接使用kill)

tl;dr当我关闭屏幕时,正在运行的进程开始使用我所有的cpu,并且不会终止。我希望它终止


共 (0) 个答案