![pgrep(또는 다른 도구)을 사용하여 동일한 이름을 가진 여러 프로세스 중 하나를 찾으려면 어떻게 해야 합니까? [폐쇄]](https://linux55.com/image/222746/pgrep(%EB%98%90%EB%8A%94%20%EB%8B%A4%EB%A5%B8%20%EB%8F%84%EA%B5%AC)%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EA%B0%80%EC%A7%84%20%EC%97%AC%EB%9F%AC%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%A4%91%20%ED%95%98%EB%82%98%EB%A5%BC%20%EC%B0%BE%EC%9C%BC%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
여러 bash 스크립트가 실행 중입니다. 그들 사이의 유일한 차이점은 pid입니다. 이런 대본을 쓰고 싶다이것특정 bash 프로세스만 모니터링하고 하위 프로세스는 제외합니다. 나는 보았다이것문제가 있지만 이 경우 프로세스 이름이 다르므로 정확한 정규식을 작성하면 됩니다.
현재 내가 한다면
% pgrep bash
40583
47095
48133
49244
만약 내가한다면
% pgrep -P 47095
47099
50151
나는 다음과 같은 것을하고 싶다
% pgrep bash -P 47095
그런 다음 결과를 얻으십시오.
47095 # (i.e. no daughter processes)
47095가 더 이상 존재하지 않으면 null 값이 반환됩니다. 이것이 어떻게 달성될 수 있습니까? 대답은 pgrep을 기반으로 할 필요는 없습니다. 중요한 것은 프로세스가 실행 중이면 한 줄만 반환하고 그러한 프로세스가 없으면 아무것도 반환하지 않는다는 것입니다.
답변1
내 생각에 당신이 원하는 것은 PID 파일 처리입니다.pgrep
, 사용하는 대신 -P
:
-F, --pidfile file
Read PIDs from file. This option is more useful for pkill or pidwait than pgrep.
실행 중:
% sleep 100 &
[1] 26819
% echo 26819 > pid
% pgrep -F pid sleep
26819
% pgrep -F pid sleep -l
26819 sleep
% pgrep -F pid awake -l
%