특정 사용자가 시작한 비잠자기 프로세스 수를 계산하고 싶습니다. 나는 수면 과정이 상태 변수에 "S" 또는 "D"를 갖는 과정이라는 것을 알고 있습니다 ps
. 또한 변수가 포함된 목록에서 다음 user
과 state
같은 방법으로 프로세스를 계산할 수 있다는 것도 알고 있습니다.
ps -e -o user,state | grep -c 'username'
마찬가지로, 나는 다음과 같은 방법으로 수면 과정을 계산할 수 있다는 것을 알고 있습니다.
ps -e -o user,state | grep -c 'S|D'
그러나 두 정보를 모두 사용하여 사용자가 시작한 비잠자기 프로세스를 계산하는 방법을 알 수 없습니다 username
.
답변1
명령 출력에서
ps -e -o user,state
상태는 각 줄의 마지막 문자입니다. 따라서 우리는 기본적으로 주어진 사용자 이름을 포함하고 an S
또는 a로 끝나지 않는 줄을 계산합니다 D
.
ps -e -o user,state | grep -c -E 'pduck.*[^SD]$'
그러면 단어(내 사용자 이름)가 포함 되고 또는 pduck
로 끝나지 않는 모든 줄을 찾거나 계산합니다 .S
D
이 -E
필요하므로 grep
정규식을 이해합니다.
@스틸드라이버댓글에서 제안한"사용자를 선택하고 -u pduck
출력 필드 목록에서 모두 생략합니다.". 동의합니다. 이것이 훨씬 더 좋지만 스위치를 삭제해야 합니다. -e
그렇게 하면 모든 프로세스(사용자의 프로세스뿐만 아니라 pduck
)가 선택되기 때문입니다.
ps -u pduck -o state | grep -c -E '[^SD]$'