我想存储一个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)