[유닉스] 프로세스 관리 명령


프로세스 목록 보기

ps 명령

  • 현재 실행 중인 프로세스의 정보를 출력
  • 형식 : ps [옵션]
  • 옵션
    • -e : 시스템에서 실행 중인 모든 프로세스 정보 출력
    • -f : 프로세스에 대한 자세한 정보 출력
    • -u uid : 특정 사용자에 대한 모든 프로세스 출력
  • 사용 예 : ps, ps –ef, ps aux

현재 단말기의 프로세스 목록 출력

  • ps 명령을 옵션 없이 사용하면 현재 쉘이나 단말기 창에서 실행시킨 사용자 프로세스의 정보 출력
$ ps
PID TTY TIME CMD
2570 tty1 00:00:12 bash
6710 tty1 00:00:00 ps
$

프로세스의 상세 정보 출력

  • -f 옵션은 프로세스의 상세 정보 출력
$ ps –f
UID PID PPID C STIME TTY TIME CMD
ksshin 2570 1189 0 6월 16 tty1 00:00:12 -bash
ksshin 7174 2570 0 17:42 tty1 00:00:00 ps -f
$

전체 프로세스 목록 출력 (System V 계열)

  • -e 옵션은 시스템에서 실행 중인 모든 프로세스 출력
  • TTY 값이 ‘?’인 것은 특정 터미널에서 실행되지 않은 프로세스로, 대부분 데몬
$ ps –e
PID TTY TIME CMD
1 ? 00:00:09 init
2 ? 00:00:00 kthreadd
3 ? 00:00:26 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:24 rcu_sched
......
$
  • 전체 프로세스의 상세 정보 확인은 –e 옵션과 –f 옵션을 함께 사용
$ ps –ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 6월 16 ? 00:00:09 /sbin/init
root 2 0 0 6월 16 ? 00:00:00 [kthreadd]
root 3 2 0 6월 16 ? 00:00:26 [ksoftirqd/0]
root 5 2 0 6월 16 ? 00:00:00 [kworker/0:0H]
root 7 2 0 6월 16 ? 00:00:24 [rcu_sched]
......
$

전체 프로세스 목록 출력 (BSD 계열)

  • ps aux 명령
$ ps aux | more
UID PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 4572 1804 ? Ss 6월 25 0:14 /sbin/init
root 2 0.0 0.0 0 0 ? S 6월 25 0:00 [kthread]
root 3 0.0 0.0 0 0 ? S 6월 25 0:46 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 6월 25 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 6월 25 0:43 [rcu_sched]
......
$

특정 사용자의 프로세스 목록 출력

  • -u 옵션은 특정 사용자가 실행시킨 프로세스의 목록 확인
$ ps –u ksshin
PID TTY TIME CMD
1693 ? 00:00:05 gnome-keyring-d
1695 ? 00:00:05 init
1767 ? 00:00:00 ssh-agent
1772 ? 00:00:47 dbus-daemon
1780 ? 00:00:00 upstart-event-b
......
$

특정 프로세스 정보 검색 명령

  • ps 명령 이용
$ ps –ef | grep bash
ksshin 2570 1189 0 6월 16 tty1 00:00:12 –bash
ksshin 7205 2570 0 18:01 tty1 00:00:00 grep--color=auto bash
$
  • pgrep 명령 이용

    • 지정한 패턴과 일치하는 프로세스의 정보를 출력
    • 형식 : pgrep [옵션] [패턴]
    • 사용 예 : pgrep bash, pgrep –l –u ksshin
$ pgrep –l bash
2570 bash
$


프로세스의 종료

  • 응답 없는 프로세스나 불필요한 프로세스를 강제로 종료시키려면 해당 프로세스의 PID를 알아야 함
  • ps –ef 명령으로 프로세스의 PID와 PPID 확인 가능
  • PPID로 부모 프로세스를 종료시켜야 할 때도 있음
  • 프로세스 종료시키는 명령 : kill, pkill
  • 프로세스에 시그널을 보내 프로세스가 종료되게 함

kill 명령 이용해 프로세스 종료

  • kill 명령
    • 지정한 시그널을 프로세스에 보냄
    • 9번(SIGKILL)은 강제 종료, 15번(SIGTERM)은 프로세스 종료, 2번(SIGINT)은 인터럽트
    • 시그널을 지정하지 않으면 15번(SIGTERM) 시그널을 보냄
    • 형식 : kill [시그널] PID …
    • 시그널
      • -9 : 프로세스 강제 종료
      • -15 : 프로세스 종료. 프로세스가 관련 파일을 정리 후 종료. 종료되지 않는 프로세스가 있을 수 있음

pkill 명령 이용해 프로세스 종료

  • 프로세스 번호 대신 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료시킴
$ sleep 100&
[1] 7386
$ sleep 200&
[2] 7387
$ ps –f
UID PID PPID C STIME TTY TIME CMD
ksshin 2570 1189 0 6월 16 tty1 00:00:12 -bash
ksshin 7386 2570 0 17:42 tty1 00:00:00 sleep 100
ksshin 7387 2570 0 17:42 tty1 00:00:00 sleep 200
ksshin 7174 2570 0 17:42 tty1 00:00:00 ps -f
$



$ pkill sleep
[1]- Terminated sleep 100
[2]+ Terminated sleep 200
$ ps –f
UID PID PPID C STIME TTY TIME CMD
ksshin 2570 1189 0 6월 16 tty1 00:00:12 -bash
ksshin 7393 2570 0 17:42 tty1 00:00:00 ps -f
$


프로세스 관리 도구

  • ps 명령으로는 현재 프로세스 목록을 확인만 할 수 있음
  • 이 정보를 가공하여 사용자가 보기 편하게 다양한 기능을 제공하는 도구

pstree 명령

  • 프로세스의 상태를 트리(Tree) 구조로 출력해 주는 명령
  • 왼쪽이 부모 프로세스, 오른쪽이 자식 프로세스
  • 형식 : pstree [옵션]
  • 사용 예 : pstree -h

top 명령

  • 주기적으로 현재 실행 중인 프로세스에 대한 정보 출력
  • 자세한 요약 정보를 상단에 출력, 각 프로세스 정보를 하단에 출력
  • 형식 : top [옵션]