如何获取脚本启动的java命令的PID?我只收到脚本的PID

如何获取脚本启动的java命令的PID?我只收到脚本的PID

我想存储一个pid爪哇命令,以便稍后能够停止它。

该java运行一个服务器,因此它不会自行完成,从而$!无法进行读取。
但是阅读$$返回给我 bash 脚本的 pid,而不是爪哇命令...

我的start.sh脚本是这样的:

#!/bin/bash
echo $$

java --add-exports java.base/sun.nio.ch=ALL-UNNAMED \
   --add-opens java.base/java.util=ALL-UNNAMED \
   --add-opens java.base/java.nio=ALL-UNNAMED \
   --add-opens java.base/java.lang=ALL-UNNAMED \
   --add-opens java.base/java.lang.invoke=ALL-UNNAMED \
   -jar target/application-metier-et-gestion.jar

它显示:204630然后启动服务器。

但aps aux向我展示了:

lebihan   204630  0.0  0.0   6820  3184 pts/1    S+   07:31   0:00 /bin/bash ./start.sh
lebihan   204631 90.8  1.6 29503752 1099948 pts/1 Sl+ 07:31   0:46 java --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens j

我怎样才能获得它204631,以便能够存储它,然后杀死我的java服务器?

答案1

更改调用的行,java使其以以下开头,exec java ...而不仅仅是java ...

echo PID is $$
exec java ...

这会将正在运行的 shell 替换为 java 进程,并使用您已捕获的相同 PID。

或者,按照建议CASjava ...,在后台运行该命令,&并且bash$!变量将包含 java 进程的 PID:

java ... &
javaPID=$!
echo PID is $javaPID

(从man bash!扩展到最近放入后台的作业的进程 ID

相关内容