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
그런 다음 서버를 시작하십시오.
그러나 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로 확장됩니다.)