PIDを保存したいです。Java後で停止するように指示します。
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
それからサーバーを始めなさい。
しかし、aは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サーバーをシャットダウンできるようにするにはどうすればよいですか?
答え1
次ではなく次java
から始まるようにコールラインを変更します。exec java ...
java ...
echo PID is $$
exec java ...
これにより、実行中のシェルがキャプチャしたのと同じPIDを持つJavaプロセスに置き換えられます。
または提案通りカスjava ...
、バックグラウンドでコマンドを実行し、&
変数bash
には$!
JavaプロセスのPIDが含まれます。
java ... &
javaPID=$!
echo PID is $javaPID
(からman bash
:!
最後にバックグラウンドに追加されたジョブのプロセスIDに展開されます。)