탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 11.1에서 시스템 정보, 프로세스 및 성능 관리 Oracle Solaris 11.1 Information Library (한국어) |
프로세스 클래스에 대한 기본 정보를 표시하는 방법(priocntl)
프로세스 우선 순위를 지정하는 방법(priocntl )
시간 공유 프로세스의 예약 매개변수를 변경하는 방법(priocntl)
이 절에서는 시스템 프로세스를 관리하기 위한 여러 작업들에 대해 설명합니다.
|
다음 표는 시스템 프로세스 관리 명령을 설명합니다.
표 2-1 프로세스 관리 명령
|
ps 명령을 사용하여 시스템에서 활성 프로세스의 상태를 확인하고, 프로세스에 대한 기술적 정보를 표시할 수 있습니다. 이 데이터는 프로세스 우선 순위 설정 방법 결정과 같은 관리 작업에 유용합니다.
사용하는 옵션에 따라 ps 명령은 다음 정보를 보고합니다.
프로세스의 현재 상태
프로세스 ID
상위 프로세스 ID
사용자 ID
예약 클래스
우선 순위
프로세스의 주소
사용된 메모리
사용된 CPU 시간
다음 표에서는 ps 명령으로 보고되는 몇 가지 필드를 설명합니다. 표시되는 옵션은 선택하는 옵션에 따라 달라집니다. 사용 가능한 모든 옵션에 대한 설명은 ps(1) 매뉴얼 페이지를 참조하십시오.
표 2-2 ps 보고서의 필드 요약
|
프로세스 명령을 사용하여 /proc 디렉토리에 나열된 프로세스에 대한 자세한 정보를 표시할 수 있습니다. 다음 표는 /proc 프로세스 명령을 나열합니다. 또한 /proc 디렉토리는 프로세스 파일 시스템(PROCFS)이라고 합니다. 활성 프로세스의 이미지는 여기에 해당 프로세스 ID 번호로 저장됩니다.
표 2-3 프로세스 명령(/proc )
|
자세한 내용은 proc(1)을 참조하십시오.
프로세스 툴은 ps 명령의 일부 옵션과 유사하지만, 이러한 명령으로 제공되는 출력이 좀더 자세합니다.
일반적으로 프로세스 명령은 다음을 수행합니다.
몇 가지 프로세스 명령을 사용하여 프로세스에 대한 자세한 기술적 정보를 표시하거나 활성 프로세스를 제어할 수 있습니다. 표 2-3은 일부 /proc 명령을 나열합니다.
프로세스가 무한 루프에 갇히게 되거나 프로세스를 실행하는 데 너무 오래 걸리는 경우 프로세스를 중지(종료)할 수 있습니다. kill 또는 pkill 명령을 사용하여 프로세스를 중지하는 방법에 대한 자세한 내용은 2 장시스템 프로세스 관리(작업)를 참조하십시오.
/proc 파일 시스템은 상태 정보 및 제어 기능에 대한 추가 하위 디렉토리를 포함하는 디렉토리 계층입니다.
또한 /proc 파일 시스템은 프로세스 주소 공간의 개별 페이지에 대한 읽기 및 쓰기 권한을 재매핑하는 데 사용되는 xwatchpoint 기능도 제공합니다. 이 기능에는 제한 사항이 없으며 MT 안전입니다.
디버깅 툴은 /proc의 xwatchpoint 기능을 사용하도록 수정되어 전체 xwatchpoint 프로세스가 더 빨라졌습니다.
dbx 디버깅 툴을 사용하여 xwatchpoint를 설정할 때 다음 제한 사항이 제거되었습니다.
SPARC 기반 시스템 등록 창으로 인한 스택의 로컬 변수에 대한 xwatchpoint 설정
다중 스레드 프로세스에 대한 xwatchpoint 설정
자세한 내용은 proc(4) 및 mdb(1) 매뉴얼 페이지를 참조하십시오.
$ ps [-efc]
사용자의 로그인 세션과 연관된 프로세스만 표시합니다.
시스템에서 실행되는 모든 프로세스에 대한 전체 정보를 표시합니다.
프로세스 스케줄 정보를 표시합니다.
예 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 . . .
# pgrep process
여기서 process는 추가 정보를 표시하고자 하는 프로세스의 이름입니다.
프로세스 ID는 출력의 첫번째 열에 표시됩니다.
# /usr/bin/pcommand pid
실행하고자 하는 (/proc) 명령입니다. 표 2-3은 이러한 명령을 나열하고 설명합니다.
프로세스 ID를 식별합니다.
예 2-2 프로세스에 대한 정보 표시
다음 예는 프로세스 명령을 사용하여 cron 프로세스에 대한 추가 정보를 표시하는 방법을 보여줍니다.
# pgrep cron 1 4780 # pwdx 4780 2 4780: /var/spool/cron/atjobs # ptree 4780 3 4780 /usr/sbin/cron # pfiles 4780 4 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
cron 프로세스에 대한 프로세스 ID를 가져옵니다.
cron 프로세스에 대한 현재 작업 디렉토리를 표시합니다.
cron 프로세스를 포함하는 프로세스 트리를 표시합니다.
fstat 및 fcntl 정보를 표시합니다.
# pgrep process
여기서 process는 제어하고자 하는 프로세스의 이름입니다.
프로세스 ID는 출력의 첫번째 열에 표시됩니다.
# /usr/bin/pcommand pid
실행하고자 하는 프로세스(/proc) 명령입니다. 표 2-3은 이러한 명령을 나열하고 설명합니다.
프로세스 ID를 식별합니다.
# ps -ef | grep pid
경우에 따라 프로세스를 중지(종료)해야 할 수 있습니다. 프로세스가 무한 루프에 있을 수 있습니다. 또는 완료되기 전에 중지하려고 하는 큰 작업을 시작했을 수 있습니다. 소유하고 있는 모든 프로세스를 종료할 수 있습니다. 수퍼유저는 프로세스 ID가 0, 1, 2, 3 및 4인 프로세스를 제외하고 시스템의 모든 프로세스를 종료할 수 있습니다. 이러한 프로세스를 종료하면 시스템에 문제가 발생할 가능성이 큽니다.
자세한 내용은 pgrep(1) 및 pkill(1) 및 kill(1) 매뉴얼 페이지를 참조하십시오.
$ pgrep process
여기서 process는 종료하고자 하는 프로세스의 이름입니다.
예를 들면 다음과 같습니다.
$ pgrep netscape 587 566
프로세스 ID는 출력에 표시됩니다.
주 - Sun Ray에 대한 프로세스 정보를 가져오려면 다음 명령을 사용합니다.
# ps -fu user
이 명령은 모든 사용자 프로세스를 나열합니다.
# ps -fu user | grep process
이 명령은 사용자에 대한 특정 프로세스를 찾습니다.
$ pkill [signal] process
pkill 명령줄 구문에 신호가 포함되지 않은 경우 사용되는 기본 신호는 –15(SIGKILL)입니다. pkill 명령과 함께 –9 신호(SIGTERM)를 사용하면 프로세스가 즉시 종료됩니다. 하지만 –9 신호는 데이터베이스 프로세스나 LDAP 서버 프로세스와 같은 특정 프로세스를 종료하는 데 사용하면 안 됩니다. 이 경우 데이터 손실이 발생할 수 있습니다.
중지할 프로세스의 이름입니다.
참고 - pkill 명령을 사용하여 프로세스를 종료할 때 처음에는 신호 옵션을 포함시키지 말고 자체 명령만 사용하여 시도해 봅니다. pkill 명령을 -9 신호와 함께 사용하기 전에 몇 분 정도 기다린 후 프로세스가 종료되었는지 확인합니다.
$ pgrep process
종료한 프로세스는 pgrep 명령 출력에 더 이상 나열되지 않아야 합니다.
# ps -fu user
여기서 user는 프로세스를 표시하고자 하는 사용자입니다.
프로세스 ID는 출력의 첫번째 열에 표시됩니다.
# kill [signal-number] pid
kill 명령줄 구문에 신호가 포함되지 않은 경우 사용되는 기본 신호는 –15(SIGKILL)입니다. kill 명령과 함께 –9 신호(SIGTERM)를 사용하면 프로세스가 즉시 종료됩니다. 하지만 –9 신호는 데이터베이스 프로세스나 LDAP 서버 프로세스와 같은 특정 프로세스를 종료하는 데 사용하면 안 됩니다. 이 경우 데이터 손실이 발생할 수 있습니다.
종료하고자 하는 프로세스의 프로세스 ID입니다.
참고 - kill 명령을 사용하여 프로세스를 중지할 때 처음에는 신호 옵션을 포함시키지 말고 자체 명령만 사용하여 시도해 봅니다. kill 명령을 -9 신호와 함께 사용하기 전에 몇 분 정도 기다린 후 프로세스가 종료되었는지 확인합니다.
$ pgrep pid
종료한 프로세스는 pgrep 명령 출력에 더 이상 나열되지 않아야 합니다.
pargs 명령 및 preap 명령은 프로세스 디버깅을 개선합니다. pargs 명령은 활성 프로세스 또는 코어 파일과 연관된 인수 및 환경 변수를 출력합니다. preap 명령은 defunct(좀비) 프로세스를 제거합니다. 좀비 프로세스는 상위 프로세스에서 요청한 종료 상태를 가지지 않습니다. 이러한 프로세스는 일반적으로 해를 끼치지 않지만 수가 많아지면 시스템 리소스를 소모할 수 있습니다. pargs 및 preap 명령을 사용하여 검사할 권한이 있는 프로세스를 검사할 수 있습니다. 수퍼유저는 모든 프로세스를 검사할 수 있습니다.
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