둘 이상의 프로세스에 유사한 PID 번호가 있는 경우 하나의 특정 PID 값을 선택하는 방법은 무엇입니까?

둘 이상의 프로세스에 유사한 PID 번호가 있는 경우 하나의 특정 PID 값을 선택하는 방법은 무엇입니까?

저는 RHEL 7.5를 사용하고 있으며 PID 번호가 있는 파일을 포함하는 Java 프로그램이 있습니다. 프로세스가 종료되면 파일은 여전히 ​​존재하며 해당 파일에 저장된 PID가 살아 있는지 확인하는 스크립트를 수행 중이지만 의심스럽거나 문제가 있습니다.

PID 445가 존재하고 2445가 존재합니다. 그럼 어떻게 445만 얻을 수 있나요?

다음 명령으로 시도했습니다.

ps -ax | egrep "^ 445"

그러나 아무것도 반환하지 않았습니다.

두 가지 프로세스:

ps -ax | grep -v grep | egrep "445"

  445 pts/2    Sl     3:50 /opt/
 2445 ?        S      0:00 dbus-launch

답변1

사용 -p:

-p proclist
프로세스 ID 번호가 에 제공되는 프로세스에 대한 정보를 작성합니다 proclist. […]

(원천)

귀하의 경우:

ps -p 445

psPOSIX는 "오류가 발생"한 경우 긍정적인 종료 상태를 반환해야 한다고 말합니다 . ps내가 테스트한 모든 항목 proclist에는 PID가 하나 이상 포함되어 있지 않은 것으로 간주됩니다.기존의"잘못"으로 처리됩니다. 이것은 유용합니다. 예:

ps -p 445 >/dev/null && echo "Process exists."

노트:

답변2

다음과 같이 Bash 스크립트에서 프로세스가 실행 중인지 확인할 수 있습니다 kill -0.

if [ -f ${pid_file} ] && kill -0 $(cat ${pid_file}) 2>/dev/null; then
  exit
else
  rm -rf ${pid_file}
  exit
fi

${pid_file}PID가 포함된 파일 경로와 같습니다. -f ${pid_file}PID 파일이 존재하는지 확인합니다 . 그런 다음 kill -0 $(cat ${pid_file})프로세스가 실행 중인지 확인합니다.

이는 다음과 같이 요약됩니다.

  • 프로세스가 실행 중이면 스크립트를 종료하는 것 외에는 아무것도 하지 마십시오.
  • Else(프로세스가 다음과 같은 경우~ 아니다실행 중이면 PID 파일을 제거하기만 하면 됩니다.

의 마법은 kill -0매뉴얼 페이지에 설명되어 있습니다.kill:

만약에시그가 0이면 신호가 전송되지 않지만 오류 검사는 계속 수행됩니다. 이는 프로세스 ID 또는 프로세스 그룹 ID가 있는지 확인하는 데 사용할 수 있습니다.

관련 정보