我想存储Java命令的 pid,以便以后能够停止它。
该 java 运行服务器,因此它不会自行完成,因此$!
无法读取。
但是阅读返回了 bash 脚本的 pid,而不是Java$$
命令之一......
我的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
然后启动服务器。
但是一个ps 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 服务器?
更改调用的行,
java
使其以而exec java ...
不是仅开头java ...
:这会将正在运行的 shell 替换为 java 进程,使用您已经捕获的相同 PID。
或者,按照cas
java ...
的建议,在后台运行命令,&
其中bash
的$!
变量将包含 java 进程的 PID:(从
man bash
:!
扩展到最近放入后台的作业的进程 ID)