UNIX 및실습 8 장. 프로세스와사용자 명령익히기 1
학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된유닉스명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2
01. 프로세스의개념과종류 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process ID : PID 1번프로세스 : init #include <stdio.h> int main () { printf ( Hello World!! ); } 1010111000... 1010111000... helloworld.c source file 컴파일 a.out program 실행 process 3 프로그램언어로구성된아스키텍스트파일 실행가능한기계어파일 실행중인프로그램
종류 프로세스종류 (1) 시스템프로세스 : 유닉스운영에필요한기능수행 사용자프로세스 : 사용자들이실행시킨프로세스 시스템부팅 init process Shell process Unix system processes User processes 4
프로세스의종류 (2) 유닉스프로세스의종류 종류 데몬 (daemon) 부모 (parent) 자식 (child) 고아 (orphan) 좀비 (zombie) 설명 UNIX 커널에의해시작되는프로세스로서비스제공을위한프로세스들이다. 자식프로세스를만드는프로세스 부모에의해생성된프로세스로실행이끝나면부모프로세스로돌아간다. 자식프로세스가종료하기전에부모가종료된프로세스. 고아프로세스는 1 번프로세스를새로운부모로가진다. 부모프로세스가종료처리를하지않은프로세스프로세스테이블만차지하고있다. 5
02. 프로세스관리 프로세스목록보기 ps pgrep 프로세스종료시키기 kill pkill 포그라운드 ( 전위 ) 와백그라운드 ( 후위 ) 작업제어 fg bg jobs 6
프로세스목록보기 ps [1/3] process status 프로세스정보를출력 PID, 터미널, CPU 시간, 명령어 옵션 ps [ 옵션 ] -e : 시스템에있는모든프로세스목록출력 -f : 프로세스에대한자세한정보출력 -u uid : 특정사용자에속한모든프로세스출력 7
프로세스목록보기 ps [2/3] 사용법 [1] ssh lily.mmu.ac.kr [kgu@lily ~]$ ps PID TTY TIME CMD 11607 pts/0 00:00:00 bash 11765 pts/0 00:00:00 ps ssh lily.mmu.ac.kr [kgu@lily ~]$ ps -e PID TTY TIME CMD 1? 00:00:17 systemd 2? 00:00:01 kthreadd 3? 00:00:01 ksoftirqd/0 ssh lily.mmu.ac.kr [kgu@lily ~]$ ps -f UID PID PPID C STIME TTY TIME CMD kgu 11607 11606 0 09:01 pts/0 00:00:00 -bash kgu 11767 11607 0 09:18 pts/0 00:00:00 ps f [kgu@lily ~]$ ps u user1 PID TTY TIME CMD 1283 pts/1 0:00 bash 1313 pts/1 0:00 ps 8
프로세스목록보기 ps [3/3] 사용법 [2] ssh lily.mmu.ac.kr [kgu@lily ~]$ ps -ef more UID PID PPID C STIME TTY TIME CMD root 1 0 0 Apr11? 00:00:17 /sbin/init root 2 0 0 Apr11? 00:00:01 [kthreadd] root 3 2 0 Apr11? 00:00:01 [ksoftirqd/0] root 5 2 0 Apr11? 00:00:00 [kworker/0:0h] root 7 2 0 Apr11? 00:00:00 [kworker/u:0h] root 8 2 0 Apr11? 00:00:01 [migration/0] 구분설명구분설명 UID 소유자의사용자 ID STIME 프로세스시작시간 PID 프로세스번호 TTY 터미널번호 (? : 데몬 ) PPID 부모프로세스번호 TIME CPU 사용시간 C 프로세스우선순위 CMD 명령어이름 9
특정프로세스정보검색하기 pgrep [1/2] pgrep [ 옵션 ] 패턴 프로세스이름으로찾아정보를출력 솔라리스에만있는특별한명령 ps [ 옵션 ] grep 패턴 과같은기능 옵션 -x : 패턴과정확히일치하는 PID 출력 -n : 패턴을포함하고있는가장최근의 PID 출력 -U uid : 특정사용자에속한 PID 출력 -l : PID 와프로세스이름출력 -t term : 특정터미널과관련된프로세스출력 패턴 찾으려는정보 10
특정프로세스정보검색하기 사용법 pgrep [2/2] ssh iris.mmu.ac.kr [kgu@iris ~]$ pgrep ssh 1096 10092 [kgu@lily ~]$ ps -e grep ssh 1096? 00:00:18 sshd 10092? 00:00:00 sshd ssh iris.mmu.ac.kr [kgu@iris ~]$ pgrep -n vi 10303 ssh iris.mmu.ac.kr [kgu@iris ~]$ pgrep -l ssh 1096 sshd 10092 sshd ssh iris.mmu.ac.kr [kgu@iris ~]$ pgrep -lt pts/2 10098 bash 11
[ 실습하기 ] 프로세스목록보기 실습하기 1) ps 2) ps -f 3) ps e 4) ps e more 5) ps ef more 6) ps ef grep $LOGNAME 7) ps u $LOGNAME 8) ps e grep ssh 9) pgrep ssh 10)pgrep u 로그인 id 11)pgrep lu 로그인 id 12
프로세스종료시키기 프로세스의종료 ps 명령으로찾은프로세스중불필요한프로세스를강제로종료시킨다. 프로세스를종료시키면그자식프로세스들도같이종료된다. 프로세스를종료시킬때 PID 나프로세스이름을알아야한다. 프로세스종료시키기 kill pkill 13
시그널 (signal) 시그널 [1/2] 프로세스에게보내는신호 프로세스는이신호에응답한다. 신호무시 프로세스종료등 kill, pkill 명령으로신호를보낸다. $ man signal 또는 man s 5 signal 로자세한정보를찾아볼수있다. 14
시그널의종류 시그널 [2/2] 시그널번호 시그널이름 기능 기본응답 1 SIGHUP 터미널연결이끊어진경우에발생종료 2 SIGINT 보통 Ctrl-C 에의해발생종료 9 SIGKILL 프로세스를 kill 시킨다. 이시그널은무시할수없다. 종료 15 SIGTERM 프로세스를종료시킨다. 이시그널은무시할수도있다. kill 명령이보내는기본시그널 종료 15
프로세스종료 kill [1/2] 지정한프로세스들에게시그널을보낸다. 사용자가소유한프로세스만종료시킬수있다. root 는모든프로세스를종료시킬수있다. kill 명령은디폴트로 15 번 (SIGTERM) 시그널을보낸다 (soft kill). kill 명령을사용하기전에대상프로세스의 PID 를알고있어야한다 (ps, pgrep 명령사용 ). 시그널 -9 : 강제종료 kill [ 시그널 ] pid 16
프로세스종료 kill [2/2] 사용법 ssh lily.mmu.ac.kr [kgu@lily ~]$ sleep 1000 & [1] 11787 [kgu@lily ~]$ kill 11787 soft kill 11787 프로세스에게 SIGTERM 시그널을보낸다. 이것이바람직함 ssh lily.mmu.ac.kr $ kill 9 11787 $ sure kill 11787 프로세스에게 SIGKILL 시그널을보낸다. SIGKILL 을받으면프로세스가즉시종료된다. 어떤시그널도무시하는프로세스를종료시킬때유용하다. 17
프로세스종료 pkill [1/2] pgrep 명령과유사하게패턴을이용하여프로세스를찾아해당프로세스에게시그널을보낸다. 솔라리스에서만제공 사용자가소유한프로세스만종료시킬수있다. root 는모든프로세스를종료시킬수있다. kill 명령은디폴트로 15 번 (SIGTERM) 시그널을보낸다. (soft kill) kill 명령을사용하기전에대상프로세스명을알고있어야한다. (ps, pgrep 명령사용 ) 시그널 -9 : 강제종료 pkill [ 시그널 ] 프로세스명 18
프로세스종료 pkill [2/2] 사용법 ssh iris.mmu.ac.kr [kgu@iris ~]$ sleep 1000 & [1] 11793 [kgu@iris ~]$ [kgu@iris ~]$ pkill sleep [1]+ 종료됨 sleep 1000 soft kill sleep 명령을수행하고있는프로세스에게 SIGTERM 시그널을보낸다. ssh iris.mmu.ac.kr $ pkill 9 sleep $ sure kill SIGKILL 시그널을보낸다. 19
[ 실습하기 ] 프로세스종료 실습하기 1) ps 2) sleep 100 & 3) ps 4) kill -9 PID(sleep) 5) vi /etc/hosts * 다른터미널에서 1) ps 2) kill -9 PID(vi) 1) ps 2) sleep 100 & 3) pkill sleep * 다른터미널에서 1) vi /etc/hosts 2) pkill -9 vi 20
프로세스관리도구 - prstat prstat [ 옵션 ] 동작중인프로세스의통계정보를출력 프로세스정보는일정시간간격으로자동갱신 종료 : q 옵션 -a : 프로세스와사용자에대한통계를구분하여출력 -c : 중복하여출력하지않고, 기존내용의아래쪽에새로운정보를출력 -s 키 : 키에따라정렬하여출력. ( 키 : cpu, pri, rss, size, time) -u euid : 해당 euid에속한프로세스정보만출력 -U uid : 해당 uid에속한프로세스정보만출력 21
프로세스관리도구 - prstat 사용예 ssh iris.mmu.ac.kr $ prstat PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 1181 gdm 142M 28M sleep 59 0 0:00:02 0.1% gdm-simple-gree/1 800 root 43M 26M sleep 59 0 0:00:02 0.1% Xorg/3 5 root 0K 0K sleep 99-20 0:00:01 0.1% zpool-rpool/136 1390 user1 11M 3444K cpu0 59 0 0:00:00 0.0% prstat/1 1382 root 3616K 2372K sleep 59 0 0:00:00 0.0% login/1 1383 user1 10M 2440K sleep 59 0 0:00:00 0.0% bash/1 1283 user1 10M 2472K sleep 59 0 0:00:00 0.0% bash/1 1380 root 5560K 2816K sleep 59 0 0:00:00 0.0% in.telnetd/1 607 root 13M 3516K sleep 59 0 0:00:00 0.0% nscd/26 Total: 82 processes, 408 lwps, load averages: 0.02, 0.01, 0.03 22
프로세스관리도구 - prstat 사용예 ssh iris.mmu.ac.kr $ prstat -a PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 1181 gdm 142M 28M sleep 59 0 0:00:03 0.1% gdm-simple-gree/1 800 root 43M 26M sleep 59 0 0:00:02 0.1% Xorg/3 1394 user1 11M 3364K cpu0 59 0 0:00:00 0.0% prstat/1 607 root 13M 3516K sleep 59 0 0:00:00 0.0% nscd/26 1159 gdm 129M 18M sleep 59 0 0:00:00 0.0% gnome-power-man/1 253 root 11M 3204K sleep 59 0 0:00:00 0.0% devfsadm/6 NPROC USERNAME SWAP RSS MEMORY TIME CPU 11 gdm 613M 123M 8.1% 0:00:03 0.1% 58 root 442M 179M 12% 0:00:22 0.1% Total: 82 processes, 408 lwps, load averages: 0.01, 0.01, 0.03 23
프로세스관리도구 - top 주기적으로현재실행중인프로세스에대한정보출력 솔라리스 11 부터기본패키지로탑재 자세한요약정보출력 종료 : q top [ 옵션 ] 24
프로세스관리도구 - top 사용예 ssh iris.mmu.ac.kr $ top load averages: 0.01, 0.01, 0.02; up 0+00:38:26 20:01:20 78 processes: 77 sleeping, 1 on cpu CPU states: 96.0% idle, 1.0% user, 3.0% kernel, 0.0% iowait, 0.0% swap Kernel: 195 ctxsw, 5 trap, 313 intr, 489 syscall, 4 flt Memory: 1536M phys mem, 640M free mem, 1024M total swap, 1024M free swap This terminal can only display 5 processes PID USERNAME NLWP PRI NICE SIZE RES STATE TIME CPU COMMAND 1181 gdm 1 59 0 142M 28M sleep 0:03 0.25% gdm-simple-gree 1395 user1 1 59 0 3840K 2112K cpu 0:00 0.18% top 800 root 3 59 0 43M 26M sleep 0:03 0.15% Xorg 326 root 1 59 0 9392K 1432K sleep 0:00 0.04% dhcpagent 1159 gdm 1 59 0 129M 18M sleep 0:00 0.02% gnome-power-man 25