スクリプトで始まるjavaコマンドのPIDを取得するには?スクリプトのPIDのみを受け取ります。

スクリプトで始まるjavaコマンドのPIDを取得するには?スクリプトのPIDのみを受け取ります。

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に展開されます。)

関連情報