N개 이상의 프로세스를 가진 모든 사용자를 찾아 셸에 표시합니다.

N개 이상의 프로세스를 가진 모든 사용자를 찾아 셸에 표시합니다.

ksh를 사용하여 스크립트를 작성하고 있습니다. N개 이상의 프로세스를 가진 모든 사용자를 찾아서 셸에 표시해야 합니다. N은 ksh에서 읽혀집니다.

을 사용해야 한다는 것을 알고 있지만 ps -elf이를 어떻게 구문 분석하고, N개 이상의 프로세스를 가진 사용자를 찾고, 이를 사용하여 배열을 생성합니까? ksh의 배열에 몇 가지 문제가 있습니다. 배열을 만들지 않고도 간단한 솔루션이 도움이 될 수 있습니다. 누군가가 나에게 사용하라고 추천했습니다.

ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3

하지만 제대로 작동하지 않습니다.

답변1

출력 열을 ps최소한으로 줄여야 합니다. 즉, 여기서는 사용자 이름만 요청됩니다. 이렇게 하면 추가 처리가 단순화됩니다.

예를 들어:

$ ps -eo user=

현재 실행 중인 모든 프로세스의 소유자를 인쇄합니다( =헤더 제외).

각 사용자 수를 얻는 간단한 방법:

$ ps -eo user= | sort | uniq -c
  1 dovecot
  1 messagebus
  1 mpd
  1 polkitd
  2 postfix
121 root
 27 me

그런 다음 필요에 따라 필터링할 수 있습니다.

$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root

변수에는 제한사항이 있습니다.

$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root

관련 정보