Oracle® Solaris 11.2의 시스템 정보, 프로세스, 성능 관리

인쇄 보기 종료

업데이트 날짜: 2014년 9월
 
 

시스템 프로세스 관리 명령

다음 표는 시스템 프로세스 관리 명령을 설명합니다.

표 2-1  프로세스 관리 명령
명령
설명
매뉴얼 페이지
ps, pgrep, prstat, pkill
시스템에서 활성 프로세스의 상태를 확인하고 프로세스에 대한 자세한 정보를 표시합니다.
pkill
pgrep와 동일한 기능을 수행하지만, 이름이나 기타 속성으로 프로세스를 찾거나 신호하고 프로세스를 종료합니다. 일치하는 각 프로세스는 해당 프로세스 ID가 출력되는 대신 kill 명령인 것처럼 신호됩니다.
pargs, preap
프로세스 디버깅을 돕습니다.
dispadmin
기본 프로세스 예약 정책을 나열합니다.
priocntl
우선 순위 클래스에 프로세스를 지정하고 프로세스 우선 순위를 관리합니다.
nice
시간 공유 프로세스의 우선 순위를 변경합니다.
psrset
특정 프로세스 그룹을 단일 프로세서가 아닌 프로세서 그룹에 바인드합니다.

ps 명령 사용

ps 명령을 사용하여 시스템에서 활성 프로세스의 상태를 확인하고 프로세스에 대한 기술적 정보를 표시할 수 있습니다. 이 데이터는 프로세스 우선 순위 설정 방법 결정과 같은 관리 작업에 유용합니다.

    사용하는 옵션에 따라 ps 명령은 다음 정보를 보고합니다.

  • 프로세스의 현재 상태

  • 프로세스 ID

  • 상위 프로세스 ID

  • 사용자 ID

  • 예약 클래스

  • 우선 순위

  • 프로세스의 주소

  • 사용된 메모리

  • 사용된 CPU 시간

다음 목록에서는 ps 명령으로 보고되는 몇 가지 필드를 설명합니다. 표시되는 필드는 선택하는 옵션에 따라 달라집니다. 사용 가능한 모든 옵션에 대한 설명은 ps(1) 매뉴얼 페이지를 참조하십시오.

UID

프로세스 소유자의 유효 사용자 ID입니다.

PID

프로세스 ID입니다.

PPID

상위 프로세스 ID입니다.

C

예약을 위한 프로세서 사용률입니다. 이 필드는 –c 옵션이 사용되면 표시되지 않습니다.

CLS

실시간, 시스템 또는 시간 공유와 같이 프로세스가 속하는 예약 클래스입니다. 이 필드는 –c 옵션을 사용할 때만 포함됩니다.

PRI

커널 스레드의 예약 우선 순위입니다. 숫자가 높을수록 높은 우선 순위를 나타냅니다.

NI

예약 우선 순위에 영향을 주는 프로세스의 nice 번호입니다. 프로세스가 더 “nice”해지면 우선 순위가 낮음을 의미합니다.

ADDR

proc 구조의 속성입니다.

SZ

프로세스의 가상 주소 크기입니다.

WCHAN

프로세스가 일시 정지 상태인 이벤트 또는 잠금의 주소입니다.

STIME

프로세스의 시작 시간(시, 분, 초)입니다.

TTY

프로세스 또는 상위 프로세스가 시작된 터미널입니다. 물음표는 제어 터미널이 없음을 나타냅니다.

TIME

시작된 이후 프로세스에서 사용한 총 CPU 시간입니다.

CMD

프로세스를 생성한 명령입니다.

/proc 파일 시스템 및 명령 사용

프로세스 명령을 사용하여 /proc 디렉토리에 나열된 프로세스에 대한 자세한 정보를 표시할 수 있습니다. 다음 표는 /proc 프로세스 명령을 나열합니다. 또한 /proc 디렉토리는 프로세스 파일 시스템(PROCFS)이라고 합니다. 활성 프로세스의 이미지는 PROCFS에 해당 프로세스 ID 번호로 저장됩니다.

표 2-2  프로세스 명령(/proc )
프로세스 명령
설명
pcred
프로세스 자격 증명 정보를 표시합니다.
pfiles
프로세스에서 열린 파일에 대한 fstatfcntl 정보를 보고합니다.
pflags
/proc 추적 플래그, 보류 중 신호/보류 신호 및 기타 상태 정보를 표시합니다.
pldd
프로세스에 연결된 동적 라이브러리를 나열합니다.
pmap
각 프로세스의 주소 공간 맵을 표시합니다.
psig
각 프로세스의 신호 작업 및 처리기를 나열합니다.
prun
각 프로세스를 시작합니다.
pstack
각 프로세스의 각 경량 프로세스에 대한 16진수+심볼릭 스택 추적을 표시합니다.
pstop
각 프로세스를 중지합니다.
ptime
미시상태 계산을 사용하여 프로세스 시간을 지정합니다.
ptree
프로세스를 포함하는 프로세스 트리를 표시합니다.
pwait
프로세스가 종료된 후 상태 정보를 표시합니다.
pwdx
프로세스에 대한 현재 작업 디렉토리를 표시합니다.

자세한 내용은 proc(1) 매뉴얼 페이지를 참조하십시오.

프로세스 툴은 ps 명령의 일부 옵션과 유사하지만, 이러한 명령으로 제공되는 출력이 좀더 자세합니다.

    프로세스 명령은 다음을 수행합니다.

  • fstat fcntl과 같은 프로세스, 작업 디렉토리 및 상위/하위 프로세스의 트리에 대한 추가 정보를 표시합니다.

  • 사용자가 프로세스를 중지하거나 재개할 수 있도록 하여 프로세스에 대한 제어를 제공합니다.

프로세스 명령을 사용하여 프로세스 관리(/proc)

몇 가지 프로세스 명령을 사용하여 프로세스에 대한 자세한 기술적 정보를 표시하거나 활성 프로세스를 제어할 수 있습니다. Table 2–2에서 /proc 명령의 일부를 나열합니다.

프로세스가 무한 루프에 갇히게 되거나 프로세스를 실행하는 데 너무 오래 걸리는 경우 프로세스를 중지(종료)할 수 있습니다. kill 또는 pkill 명령을 사용하여 프로세스를 중지하는 방법에 대한 자세한 내용은 Chapter 2, 시스템 프로세스 관리를 참조하십시오.

/proc 파일 시스템은 상태 정보 및 제어 기능에 대한 추가 하위 디렉토리를 포함하는 디렉토리 계층입니다.

또한 /proc 파일 시스템은 프로세스 주소 공간의 개별 페이지에 대한 읽기 및 쓰기 권한을 재매핑하는 데 사용되는 xwatchpoint 기능도 제공합니다. 이 기능에는 제한 사항이 없으며 MT 안전입니다.

디버깅 도구는 xwatchpoint 기능을 사용하도록 수정되어 전체 xwatchpoint 프로세스가 더 빨라졌습니다.

    dbx 디버깅 도구를 사용하여 xwatchpoints를 설정할 때 다음 제한 사항이 더는 적용되지 않습니다.

  • SPARC 기반 시스템 등록 창으로 인한 스택의 로컬 변수에 대한 xwatchpoints 설정

  • 다중 스레드 프로세스에 대한 xwatchpoints 설정

자세한 내용은 proc(4)mdb(1) 매뉴얼 페이지를 참조하십시오.

프로세스를 나열하는 방법

  • ps 명령을 사용하여 시스템의 모든 프로세스를 나열합니다.
    $ ps [-efc]
    ps

    사용자의 로그인 세션과 연관된 프로세스만 표시합니다.

    –ef

    시스템에서 실행되는 모든 프로세스에 대한 전체 정보를 표시합니다.

    –c

    프로세스 스케줄 정보를 표시합니다.

예 2-1  프로세스 나열

다음 예는 옵션이 사용되지 않은 ps 명령의 출력을 보여줍니다.

$ ps
   PID TTY      TIME COMD
  1664 pts/4    0:06 csh
  2081 pts/4    0:00 ps

다음 예는 ps –ef 명령의 출력을 보여줍니다. 이 출력은 시스템이 부트될 때 실행된 첫번째 프로세스가 sched(스와퍼), init 프로세스, pageout 등으로 이어지고 있음을 나타냅니다.

$ ps -ef
 UID   PID  PPID   C    STIME TTY         TIME CMD
    root     0     0   0 18:04:04 ?           0:15 sched
    root     5     0   0 18:04:03 ?           0:05 zpool-rpool
    root     1     0   0 18:04:05 ?           0:00 /sbin/init
    root     2     0   0 18:04:05 ?           0:00 pageout
    root     3     0   0 18:04:05 ?           2:52 fsflush
    root     6     0   0 18:04:05 ?           0:02 vmtasks
  daemon   739     1   0 19:03:58 ?           0:00 /usr/lib/nfs/nfs4cbd
    root     9     1   0 18:04:06 ?           0:14 /lib/svc/bin/svc.startd
    root    11     1   0 18:04:06 ?           0:45 /lib/svc/bin/svc.configd
  daemon   559     1   0 18:04:49 ?           0:00 /usr/sbin/rpcbind
  netcfg    47     1   0 18:04:19 ?           0:01 /lib/inet/netcfgd
   dladm    44     1   0 18:04:17 ?           0:00 /sbin/dlmgmtd
  netadm    51     1   0 18:04:22 ?           0:01 /lib/inet/ipmgmtd
    root   372   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-cpufreq
    root    67     1   0 18:04:30 ?           0:02 /lib/inet/in.mpathd
    root   141     1   0 18:04:38 ?           0:00 /usr/lib/pfexecd
  netadm    89     1   0 18:04:31 ?           0:03 /lib/inet/nwamd
    root   602     1   0 18:04:50 ?           0:02 /usr/lib/inet/inetd start
    root   131     1   0 18:04:35 ?           0:01 /sbin/dhcpagent
  daemon   119     1   0 18:04:33 ?           0:00 /lib/crypto/kcfd
    root   333     1   0 18:04:41 ?           0:07 /usr/lib/hal/hald --daemon=yes
    root   370   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-network-discovery
    root   159     1   0 18:04:39 ?           0:00 /usr/lib/sysevent/syseventd
    root   236     1   0 18:04:40 ?           0:00 /usr/lib/ldoms/drd
    root   535     1   0 18:04:46 ?           0:09 /usr/sbin/nscd
    root   305     1   0 18:04:40 ?           0:00 /usr/lib/zones/zonestatd
    root   326     1   0 18:04:41 ?           0:03 /usr/lib/devfsadm/devfsadmd
    root   314     1   0 18:04:40 ?           0:00 /usr/lib/dbus-daemon --system
    .
		.
		.

프로세스에 대한 정보를 표시하는 방법

  1. 추가 정보를 표시하고자 하는 프로세스의 프로세스 ID를 가져옵니다.
    # pgrep process

    프로세스 ID는 출력의 첫번째 열에 표시됩니다.

  2. 프로세스 정보를 표시합니다.
    # /usr/bin/pcommand PID
    pcommand

    실행하려는 프로세스 명령입니다. Table 2–2는 이러한 명령을 나열하고 설명합니다.

    PID

    프로세스 ID를 식별합니다.

예 2-2  프로세스에 대한 정보 표시

다음 예는 프로세스 명령을 사용하여 cron 프로세스에 대한 추가 정보를 표시하는 방법을 보여줍니다.

# pgrep cron Obtains the process ID for the cron process
4780
# pwdx 4780 Displays the current working directory for the cron process
4780:   /var/spool/cron/atjobs
# ptree 4780 Displays the process tree that contains the cron process
4780  /usr/sbin/cron
# pfiles 4780 Displays fstat and fcntl information
4780:   /usr/sbin/cron
  Current rlimit: 256 file descriptors
   0: S_IFCHR mode:0666 dev:290,0 ino:6815752 uid:0 gid:3 rdev:13,2
      O_RDONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
   1: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   2: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   3: S_IFIFO mode:0600 dev:32,128 ino:42049 uid:0 gid:0 size:0
      O_RDWR|O_LARGEFILE
      /etc/cron.d/FIFO
   4: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR|O_NONBLOCK
   5: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR

프로세스를 제어하는 방법

  1. 제어하고자 하는 프로세스의 프로세스 ID를 가져옵니다.
    # pgrep process

    프로세스 ID는 출력의 첫번째 열에 표시됩니다.

  2. 적당한 프로세스 명령을 사용하여 프로세스를 제어합니다.
    # /usr/bin/pcommand PID
    pcommand

    실행하려는 프로세스 명령입니다. Table 2–2는 이러한 명령을 나열하고 설명합니다.

    PID

    프로세스 ID를 식별합니다.

  3. 프로세스 상태를 확인합니다.
    # ps -ef | grep PID

프로세스 종료(pkill, kill)

무한 루프 상태인 프로세스를 중지(종료)하거나 큰 작업을 완료되기 전에 중지해야 할 수 있습니다. 소유하고 있는 모든 프로세스를 종료할 수 있습니다. 시스템 관리자는 프로세스 ID가 0, 1, 2, 34인 프로세스를 제외하고 시스템의 모든 프로세스를 종료할 수 있습니다. 이러한 프로세스를 종료하면 시스템에 문제가 발생할 가능성이 큽니다.

자세한 내용은 pgrep(1), pkill(1)kill(1) 매뉴얼 페이지를 참조하십시오.

프로세스를 종료하는 방법(pkill)

  1. ()다른 사용자의 프로세스를 종료하려면 root 역할을 가져야 합니다.
  2. 종료하고자 하는 프로세스의 프로세스 ID를 가져옵니다.
    $ pgrep process

    예를 들면 다음과 같습니다.

    $ pgrep netscape
    587
    566

    프로세스 ID는 출력에 표시됩니다.


    주 -  Sun Ray 시스템의 프로세스에 대한 정보를 얻으려면 다음 명령을 사용합니다.

    모든 사용자 프로세스를 나열하려면 다음을 수행합니다.

    # ps -fu user

    사용자가 소유한 특정 프로세스를 찾으려면 다음을 수행합니다.

    # ps -fu user | grep process

  3. 프로세스를 종료합니다.
    $ pkill [signal] PID
    signal

    pkill 명령줄 구문에 신호가 포함되지 않은 경우 사용되는 기본 신호는 –15(SIGKILL)입니다. pkill 명령과 함께 –9 신호(SIGTERM)를 사용하면 프로세스가 즉시 종료됩니다. 하지만 데이터가 손실될 수 있으므로 -9 신호는 데이터베이스 프로세스나 LDAP 서버 프로세스와 같은 특정 프로세스를 종료하는 데 사용하면 안됩니다.

    PID

    중지할 프로세스의 이름입니다.


    팁  -  pkill 명령을 사용하여 프로세스를 종료할 때 처음에는 신호 옵션을 포함하지 말고 자체 명령만 사용하여 시도해 봅니다. 몇 분 후 프로세스가 종료되지 않으면 pkill 명령을 -9 신호와 함께 사용합니다.
  4. 프로세스가 종료되었는지 확인합니다.
    $ pgrep process

    종료한 프로세스는 pgrep 명령 출력에 더 이상 나열되지 않아야 합니다.

프로세스를 종료하는 방법(kill)

  1. ()다른 사용자의 프로세스를 종료하려면 root 역할을 가져야 합니다.
  2. 종료하고자 하는 프로세스의 프로세스 ID를 가져옵니다.
    # ps -fu user

    여기서 user는 프로세스 소유자입니다.

    프로세스 ID는 출력의 첫번째 열에 표시됩니다.

  3. 프로세스를 종료합니다.
    # kill [signal-number] PID
    signal

    kill 명령줄 구문에 신호가 포함되지 않은 경우 사용되는 기본 신호는 –15(SIGKILL)입니다. kill 명령과 함께 –9 신호(SIGTERM)를 사용하면 프로세스가 즉시 종료됩니다. 하지만 데이터가 손실될 수 있으므로 -9 신호는 데이터베이스 프로세스나 LDAP 서버 프로세스와 같은 특정 프로세스를 종료하는 데 사용하면 안됩니다.

    PID

    종료하고자 하는 프로세스의 프로세스 ID입니다.


    팁  - kill 명령을 사용하여 프로세스를 중지할 때 처음에는 신호 옵션을 포함시키지 말고 자체 명령만 사용하여 시도해 봅니다. kill 명령을 -9 신호와 함께 사용하기 전에 몇 분 정도 기다린 후 프로세스가 종료되었는지 확인합니다.
  4. 프로세스가 종료되었는지 확인합니다.
    $ ps

    종료한 프로세스는 ps 명령 출력에 더 이상 나열되지 않아야 합니다.

프로세스 디버깅(pargs, preap)

pargs 명령 및 preap 명령은 프로세스 디버깅을 개선합니다. pargs 명령은 활성 프로세스 또는 코어 파일과 연관된 인수 및 환경 변수를 출력합니다. preap 명령은 defunct(좀비) 프로세스를 제거합니다. 좀비 프로세스는 상위 프로세스에서 요청한 종료 상태를 가지지 않습니다. 이러한 프로세스는 일반적으로 해를 끼치지 않지만 수가 많아지면 시스템 리소스를 소모할 수 있습니다. pargspreap 명령을 사용하여 검사할 권한이 있는 프로세스를 검사할 수 있습니다. 관리자로 로그인하면 모든 프로세스를 검사할 수 있습니다.

preap 명령 사용에 대한 자세한 내용은 preap(1) 매뉴얼 페이지를 참조하십시오. pargs 명령 사용에 대한 자세한 내용은 pargs(1) 매뉴얼 페이지를 참조하십시오. 또한 proc(1) 매뉴얼 페이지를 참조하십시오.

예 2-3  프로세스 디버깅(pargs)

pargs 명령은 ps 명령으로 프로세스에 전달된 모든 인수를 표시할 수 없는 오래 지속되는 문제를 해결합니다. 다음 예는 pgrep 명령과 함께 pargs 명령을 사용하여 프로세스에 전달된 모든 인수를 표시하는 방법을 보여줍니다.

# pargs `pgrep ttymon`
579:	/usr/lib/saf/ttymon -g -h -p system-name console login:  
-T sun -d /dev/console -l 
argv[0]: /usr/lib/saf/ttymon
argv[1]: -g
argv[2]: -h
argv[3]: -p
argv[4]: system-name console login: 
argv[5]: -T
argv[6]: sun
argv[7]: -d
argv[8]: /dev/console
argv[9]: -l
argv[10]: console
argv[11]: -m
argv[12]: ldterm,ttcompat
548:	/usr/lib/saf/ttymon
argv[0]: /usr/lib/saf/ttymon

다음 예는 pargs – e 명령을 사용하여 프로세스와 연관된 환경 변수를 표시하는 방법을 보여줍니다.

$ pargs -e 6763
6763: tcsh
envp[0]: DISPLAY=:0.0