스크립트로 시작된 java 명령의 PID를 얻는 방법은 무엇입니까? 스크립트의 PID만 받습니다.

스크립트로 시작된 java 명령의 PID를 얻는 방법은 무엇입니까? 스크립트의 PID만 받습니다.

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로 확장됩니다.)

관련 정보