감독자를 죽일 때 감독자 작업의 하위 프로세스가 종료되도록 하려면 어떻게 해야 합니까?

감독자를 죽일 때 감독자 작업의 하위 프로세스가 종료되도록 하려면 어떻게 해야 합니까?

내 응용 프로그램은 jar 파일이며 일부 환경 변수가 필요합니다. 모든 환경 변수를 다음과 같은 파일에 넣었습니다.

export VAR=value
export VAR2=value2
#....etc

내 감독자 구성 파일은 다음과 같습니다.

[program:programname]
command=bash -c "source /path/to/env/file && java -jar /path/to/jar.jar"

ps -ef | grep programname두 개의 별도 라인에 두 개의 프로세스를 표시합니다. 하나는 is bash -c "source blah && java blah"이고 다른 하나는 just 입니다 java blah.

이제 문제는 이 작업을 수행하거나 심지어 를 수행 supervisorctl stop programname하더라도 service supervisor stopkill -9 whatever the supervisor pid is번째 프로세스는 종료되지만 일반 Java 프로세스는 그대로 유지되어 고아가 되며 상위 프로세스 pid는 이제 1입니다. 항아리를 수동으로 죽이지 않고 죽게 만드는 방법은 무엇입니까?

답변1

다음으로 exec바꾸기를 사용하세요 :bashjava

[program:programname]
command=bash -c "source /path/to/env/file && exec java -jar /path/to/jar.jar"

이 경우 종료해야 하는 프로세스는 하나만 있습니다.

답변2

명령을 쉘 스크립트로 변경하고 그 자체를 java로 바꾸시겠습니까?

#!/bin/bash
source /i/pity/da/env/foo
exec java ...

관련 정보