startproc으로 시작된 프로세스의 PID를 찾는 방법은 무엇입니까?

startproc으로 시작된 프로세스의 PID를 찾는 방법은 무엇입니까?

제가 이해하는 바는 일반적으로 데몬용 PID 파일을 생성하는 것이 좋은 생각이라는 것입니다. 이는 startproc해당 데몬을 시작하는 좋은 방법입니다.

PID 파일을 참조하려면 -i 및 -p 매개변수가 필요하다는 것을 알고 있지만 startprocPID 파일을 생성하거나 시작한 데몬의 ID로 업데이트하지 않습니다. echo 를 사용할 $!때 올바른 프로세스 식별자도 제공되지 않습니다 .startproc

startproc데몬의 PID를 얻는 방법에 대한 제안이 있는 사람이 있습니까?


어쨌든, 나는 rc 스크립트를 작성 중이고 권한이 없는 사용자로 JVM을 시작하고 싶습니다. 나는 이 사용자에게 로그인 셸(옵션이 아님)을 제공하고 싶지 않으며 su -c "java ..." user데몬이 실행되는 동안 루트 프로세스를 정지시키고 싶지 않습니다(이것은 제외됩니다 sudo -Eu user java ...). 따라서 이것이 가능한 모든 해결 방법임을 인정하지만 그 중 어떤 것도 이상적이라고 생각하지 않습니다. 그러나 이러한 대안에 대한 나의 가정이 잘못된 경우 언제든지 수정해 주시기 바랍니다.

답변1

이 작업을 수행하는 방법을 아는 사람은 아무도 없는 것 같습니다.

java대신 저는 Tomcat이 기본적으로 수행하는 작업을 수행했습니다. 쉘 스크립트를 작성하고 직접 호출하는 대신 내 서비스에서 호출했습니다 .

echo $!이 쉘 스크립트는 JVM을 시작한 후 PID 파일을 생성하는 역할도 담당합니다 . 종료의 경우 이 PID 파일을 확인하고 성공적인 종료 후 삭제하기 위해 유사한 스크립트를 작성했습니다. 두 스크립트 모두 sudo -Eu $USER script_name.sh서비스에서 호출됩니다.

startproc기술적으로 이것은 해당 솔루션이 이를 전혀 사용하지 않기 때문에 내 질문에 대답하지 않지만 작동하고 실행 중인 프로세스의 명령줄을 비교하는 지루한 작업을 방지합니다.

답변2

동일한 문제가 발생하여 몇 가지 방법을 시도했습니다.

PID=$(startproc -p $PID_FILE <some parameters>)
echo $PID  > $PID_FILE

작동했습니다...SLES 11 SP4에서 시도했습니다.

그러나 SLES 12에서는 모든 것이 완전히 다릅니다 :(

관련 정보