연관된 주제: 프로세스 죽이기
리눅스 ps 명령어 사용 예제
ps 명령어는 현재 시스템에서 돌고있는 프로세스를 보여주는 가장 기본적인 명령어입니다. 이 명령은 top나 htop같이 실시간으로 시스템 자원을 출력하는 명령과는 달리 ps 명령어를 입력한 순간의 정보(user id, cpu 사용량, memory 사용량, 사용한 명령이들 등)를 보여줍니다.
ps 명령은 옵션 입력 방법이 bsd 스타일과 unix 스타일, gnu 스타일로 나뉩니다. bsd 스타일은 'ps aux'와 같이 대쉬가 없는 스타일인 반면 unix 스타일은 'ps -ef' 처럼 옵션앞에 대쉬를 넣어 옵션임을 표시하는 스타일입니다. gnu 스타일은 대쉬를 두개 넣는 스타일로 'ps --help' 처럼 사용합니다. 동일하게 문자 u를 사용하는 옵션이라도 대쉬의 유무에 따라 의미가 달라집니다.
1. 모든 프로세스 표시하기
다음 옵션은 현재 시스템에서 돌고있는 모든 프로세스의 정보를 표시합니다. 옵션으로 'ax' 또는 '-e'를 사용합니다.
$ ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:04 /sbin/init 2 ? S 0:00 [kthreadd] 25011 pts/14 Ss 0:00 -bash 25107 pts/14 R+ 0:00 ps ax $ ps -e PID TTY TIME CMD 1 ? 00:00:04 init 2 ? 00:00:00 kthreadd 25011 pts/14 00:00:00 bash 25149 pts/14 00:00:00 ps
실행되고있는 프로세스가 너무 많아서 한번에 보기 힘들 경우 less 명령어를 파이프하여 사용하면 보여지는 목록을 제어하며 프로세스를 확인할 수 있습니다. 사용 방법은 'ps ax | less'와 같습니다.
더 자세한 프로세스의 정보를 보고 싶다면 'u' 옵션이나 '-f' 옵션을 추가합니다.
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 33776 3724 ? Ss Mar19 0:04 /sbin/init root 2 0.0 0.0 0 0 ? S Mar19 0:00 [kthreadd] user 25011 0.0 0.5 26852 5244 pts/14 Ss 18:57 0:00 -bash user 25164 0.0 0.2 22648 2488 pts/14 R+ 19:19 0:00 ps aux $ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Mar19 ? 00:00:04 /sbin/init root 2 0 0 Mar19 ? 00:00:00 [kthreadd] user 25011 25010 0 18:57 pts/14 00:00:00 -bash user 25112 25011 0 19:11 pts/14 00:00:00 ps -ef
2. 특정 사용자 이름으로 보기
사용자 이름으로 목록을 필터링하고 싶을 때에는 '-u' 옵션과 바로뒤에 사용자 이름을 입력하면 됩니다. 앞서 살펴보았던 '-e' 옵션은 entire 목록을 가져오라는 의미이고 '-f'는 full-format 입니다. 사용자 이름을 기준으로 필터링할 것이므로 '-e'는 제거하고 명령을 입력합니다.
$ ps -fu user $ ps -f -u user UID PID PPID C STIME TTY TIME CMD user 25011 25010 0 18:57 pts/14 00:00:00 -bash user 25280 25011 0 19:44 pts/14 00:00:00 ps -f -u user
둘 이상의 사용자 명으로 필터링하려면 콤마(',')로 구분하여 입력합니다.
3. 프로세스 id 또는 이름으로보기
프로세스 id로 필터링 하려면 '-p' 옵션을 사용합니다. 이 옵션 역시 여러개의 프로세스 id로 보고싶다면 콤마(',')로 구분하여 사용합니다.
$ ps -f -p 1,25011 UID PID PPID C STIME TTY TIME CMD root 1 0 0 Mar19 ? 00:00:04 /sbin/init user 25011 25010 0 18:57 pts/14 00:00:00 -bash
프로세스 이름으로 보려면 '-C' 옵션을 사용해야 합니다. 여기서 한가지 주의할 사항은 프로세스의 정확한 이름을 입력해야 한다는 점입니다. 와일드 카드나 부분적인 이름은 검색되지 않습니다.
$ ps -C ssh PID TTY TIME CMD $ ps -C ssh* PID TTY TIME CMD $ ps -C sshd PID TTY TIME CMD 4755 ? 00:00:00 sshd 4801 ? 00:00:00 sshd 4883 ? 00:00:00 sshd 24939 ? 00:00:00 sshd 25010 ? 00:00:00 sshd
좀 더 유연하게 검색을 하고자 한다면 파이프로 'grep' 명령을 사용하는게 좋습니다.
ykshin@ubuntu:~$ ps -e | grep ssh 4755 ? 00:00:00 sshd 4801 ? 00:00:00 sshd 4883 ? 00:00:00 sshd 24939 ? 00:00:00 sshd 25010 ? 00:00:00 sshd
4. cpu나 메모리 사용량으로 정렬하기
시스템을 관리하다보면 어떤 프로세스가 시스템 자원을 많이 사용하는지 알고 싶을 때가 있습니다. 전체목록을 출력하고 일일히 대조하여 찾아볼 수도 있지만 원하는 항목으로 정렬이 된다면 더 빠르게 자원 소모량을 알 수 있을 것 입니다.
정렬하는 방법은 gnu 스타일 옵션인 '--sort'를 사용하면 됩니다. 특징으로는 정렬에 필요한 필드를 여러개 지정할 수 있고 각각의 필드를 오름차순으로 할지 내림차순으로 할지 지정할 수 있습니다. 오름차순과 내림차순을 지정하는 심볼은 '+', '-' 입니다. 정렬에는 매우 다양한 파라미터를 사용할 수 있습니다. 자세한 사항은 man 페이지를 참고하기 바랍니다.
다음 예는 cpu 사용량을 우선으로 내림차순 정렬한 다음 메모리 사용량을 기준으로 내림차순 정렬하고 상위 5개의 프로세스만 출력하는 명령입니다.
$ ps aux --sort=-pcpu,-pmem | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1261 0.2 0.3 165508 3928 ? Sl Mar19 7:33 /usr/sbin/someprocess lightdm 9040 0.0 1.9 839564 19988 ? Sl Mar19 0:06 /usr/sbin/otherprocess root 9025 0.0 1.9 235720 19660 tty7 Ss+ Mar19 0:02 /usr/bin/process lightdm 9086 0.0 1.6 508360 16632 ? Sl Mar19 0:00 /usr/lib/service lightdm 9083 0.0 1.4 602992 14696 ? Sl Mar19 0:00 nm-applet
5. 출력할 칼럼의 종류 바꾸기
ps 명령은 원하는 칼럼만 보이도록 설정하는 기능도 있습니다. 옵션으로는 '-o'를 사용합니다. 다음 예는 pid, username, cpu, memory, command 만을 출력하게 합니다.
$ ps -e -o pid,uname,pcpu,pmem,comm PID USER %CPU %MEM COMMAND 1 root 0.0 0.3 init 2 root 0.0 0.0 kthreadd 25011 ykshin 0.0 0.5 bash 25497 ykshin 0.0 0.2 ps
6. ps로 실시간 모니터링하기
'watch' 명령을 이용해 일정 시간마다 ps를 실행하여 실시간 감시자로 사용할 수 있습니다. 'top'과 같지는 않으며 그저 간단히 보기위함입니다.
$ watch -n 1 'ps -e -o pid,uname,pcpu,pmem,comm --sort=-pmem | head -5' Every 1.0s: ps -e -o pid,uname,pcpu,pmem,comm --sort=-pcpu,-pmem | head -5 Mon Mar 21 20:36:34 2016 PID USER %CPU %MEM COMMAND 1261 root 0.2 0.3 vmtoolsd 25732 ykshin 0.1 0.7 vi 25694 ykshin 0.1 0.2 watch 9040 lightdm 0.0 1.9 unity-greeter
'dev > unix-like' 카테고리의 다른 글
[linux] 리눅스 wget 명령어 사용 예제 (0) | 2016.04.06 |
---|---|
[linux] /var/log 디렉토리에 있는 리눅스 로그 파일 (0) | 2016.04.05 |
[linux] 리눅스 nmap 명령어 사용 예제 (0) | 2016.04.01 |
[linux] 리눅스 netstat 명령어 사용 예제 (0) | 2016.03.17 |
[linux] chmod: absolute mode와 특수권한 (0) | 2016.03.16 |
댓글