pgrep
이를 사용하여 명령을 실행하면 watch
실제 pgrep 출력뿐만 아니라 프로세스도 표시됩니다 watch
.
예:
watch pgrep -lf donothing
3개의 프로세스가 표시되지만
pgrep -lf donothing
하나도 표시되지 않습니다. watch
보여주지 않고 이를 적절하게 처리할 수 있는 우아한 방법이 있습니까?내 자신의의 과정은 watch
?
편집하다
Patrick의 조언을 활용하세요.
watch pgrep -f '^python donothing.py'
내 사용량을 보여줍니다 pgrep
(2초마다 업데이트됩니다...)
watch pgrep -l 'python donothing.py'
및 (이러한 pgrep
명령은 단독으로 작동하지만 조합하여 작동하지는 않습니다 watch
).
watch "pgrep 'python donothing.py'"
프로세스가 있지만 아무것도 표시되지 않습니다.
답변1
pgrep donothing.py
귀하의 의견으로 판단하면 또는 을 수행해야 합니다 pgrep -x donothing.py
.
사용되면 pgrep -f
이름 및/또는 인수에 일치하는 문자열이 있는 모든 명령을 찾습니다. 결과를 필터링하는 좋은 방법은 없습니다. 해결책은 원하는 것을 정확하게 일치시키는 것이므로 프로세스 이름을 일치시키는 것입니다.
pgrep
기본적으로 프로세스 이름만 일치됩니다. 기본적으로 이름에 일치하는 문자열이 포함된 모든 프로세스를 검색합니다. -x
이름이 문자열과 정확히 일치하는 프로세스를 검색 합니다 .
pgrep
또한 스크립트를 이해할 만큼 똑똑합니다. 라는 스크립트가 있는 경우 ( 또는 이와 유사한 것) foo.sh
으로 표시됩니다 . 이 경우 스크립트 이름이 비교됩니다. 그래서 당신은 할 수 있습니다 또는 .ps
/bin/sh foo.sh
pgrep
pgrep foo.sh
pgrep -x foo.sh
따라서 귀하의 경우에는 pgrep -x donothing.py
정확한 일치를 얻으려고 노력해야 합니다.
편집:
이것은 AS 스크립트에서만 작동한다는 점에 유의해야 합니다 /path/to/donothing.py
. 시작하면 python donothing.py
작동하지 않습니다.
이 경우에는 와 같은 정규식을 사용해야 합니다 pgrep -f '^python donothing.py'
.
EDIT2: 참조에
문제 watch
가 있습니다. running은 매개변수 없이 실행됩니다 watch pgrep -f '^python donothing.py'
. 예상한 것과는 달리 매개변수로 전달 pgrep
됩니다 . 전체 pgrep 명령을 인용해야 합니다.-f '^python donothing.py'
watch
pgrep
watch "pgrep -f '^python donothing.py'"
또 다른 참고 사항으로. 다른 용도로 사용할 계획이라면 이렇게 하는 것이 더 안전할 것입니다.
watch "pgrep -f '(^|\S+/)python donothing.py'"
이는 /usr/bin/python
프로세스가 단순한 python
.