ps 명령을 사용하여 특정 프로세스 수를 가져온 다음 사용자별로 정렬하고 계산하는 방법

ps 명령을 사용하여 특정 프로세스 수를 가져온 다음 사용자별로 정렬하고 계산하는 방법

사용자별 프로세스 수를 확인해야 합니다. 예를 들어 나는 그래

ps -ef | grep apache

여기에는 모든 아파치 프로세스가 나열됩니다. 이제 각 사용자에 대해 Linux에서 실행 중인 프로세스 수를 계산하고 싶습니다.

어떻게 해야 얻을 수 있나요?

답변1

짧은 솔루션:

ps -eo "%U" --sort=user h | uniq -c

  • --sort=user- 정렬 기준user name

  • uniq -c- 고유 사용자당 프로세스 수를 계산합니다.

답변2

한 가지 해결책:

gohu@Luna:~$ ps -ef | grep -v '^UID' | awk '{print $1}' | sort | uniq -c | sort -rg
    151 gohu
    149 root
      2 nobody
      2 avahi
      1 syslog
      1 rtkit
      1 ntp
      1 message+
      1 daemon
      1 colord

그리고:

  • ps -ef: 사용자를 줄의 첫 번째 요소로 하여 프로세스를 나열합니다.
  • grep -v '^UID': 헤더 행 삭제
  • awk '{print $1}': 행의 첫 번째 요소를 가져옵니다(사용자).
  • sort: 실행하기 전에 정렬이 필요합니다uniq -c
  • uniq -c: 중복 행을 병합하고 발생 횟수를 계산합니다.
  • sort -rg: 숫자 정렬, 가장 빈번하게 발생하는 항목을 맨 앞에 배치

답변3

노력하다

ps -e -o user h| awk '{u[$1]++} END { for (user in u ) printf "%s:%d\n",user,u[user]}'

어디

  • -e모든 프로세스 나열
  • -o user출력 사용자만
  • h제목 표시 안함
  • awk는 사용자 수를 계산하고 ps 출력 끝에 해당 수를 표시합니다.

편집: @Gohu 덕분에 (일종) 단축될 수 있습니다.

ps -e -o user h| sort | uniq -c | sort -rg

답변4

POSIX적으로:

ps -Ao user= | sort | uniq -c | sort -rn

관련 정보