UNIX 및실습 8 장. 프로세스와사용자명령 익히기 1
학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2
Section 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 실행중인프로그램
프로세스의종류 유닉스프로세스의종류 종류 데몬 (daemon) 부모 (parent) 자식 (child) 고아 (orphan) 좀비 (zombie) 설명 UNIX 커널에의해시작되는프로세스로서비스제공을위한프로세스들이다. 자식프로세스를만드는프로세스 부모에의해생성된프로세스로실행이끝나면부모프로세스로돌아간다. 자식프로세스가종료하기전에부모가종료된프로세스. 고아프로세스는 1 번프로세스를새로운부모로가진다. 부모프로세스가종료처리를하지않은프로세스프로세스테이블만차지하고있다. 4
Section 02 프로세스관리 프로세스목록보기 ps pgrep 프로세스종료시키기 kill pkill 포그라운드 ( 전위 ) 와백그라운드 ( 후위 ) 작업제어 fg bg jobs 5
프로세스목록보기 ps [1/3] Process status 프로세스정보를출력 PID, 터미널, CPU 시간, 명령어 옵션 ps [ 옵션 ] -e : 시스템에있는모든프로세스목록출력 -f : 프로세스에대한자세한정보출력 -u uid : 특정사용자에속한모든프로세스출력 6
프로세스목록보기 ps [2/3] 사용법 [1] ps PID TTY TIME CMD 15098 pts/1 0:00 ksh ps e PID TTY TIME CMD 0? 0:00 sched 1? 0:53 init 25772 pts/6 0:00 prog0504 ps f UID PID PPID C STIME TTY TIME CMD user1 15098 15096 0 21:13:48 pts/1 0:00 -ksh 7
프로세스목록보기 ps [3/3] 사용법 [2] ps ef more UID PID PPID C STIME TTY TIME CMD root 0 0 0 3월 04? 0:00 sched root 1 0 0 3월 04? 0:53 /etc/init user1 25786 25600 0 10:30:55 pts/6 0:00 vi prog3.c user2 25600 25598 0 10:03:51 pts/6 0:00 -ksh 구분 설명 구분 설명 UID 소유자의사용자 ID STIME 프로세스시작시간 PID 프로세스번호 TTY 터미널번호 (? : 데몬 ) PPID 부모프로세스번호 TIME CPU 사용시간 C 프로세스우선순위 CMD 명령어이름 8
특정프로세스정보검색하기 pgrep [1/2] pgrep [ 옵션 ] 패턴 프로세스이름으로찾아정보를출력 솔라리스에만있는특별한명령 ps [ 옵션 ] grep 패턴 과같은기능 옵션 -x : 패턴과정확히일치하는 PID 출력 -n : 패턴을포함하고있는가장최근의 PID 출력 -U uid : 특정사용자에속한 PID 출력 -l : PID 와프로세스이름출력 -t term : 특정터미널과관련된프로세스출력 패턴 찾으려는정보 9
특정프로세스정보검색하기 사용법 pgrep [2/2] pgrep telnet 26039 26273 ps grep telnet 26039 26273 pgrep -l telnet 26039 in.telnet.d 26273 in.telnet.d pgrep n vi 25772 pgrep lt pts/2 25772 ksh 10
[ 실습하기 ] 프로세스목록보기 실습하기 1)ps 2)ps -f 3)ps e 4)ps e more 5)ps ef more 6)ps ef grep 로그인 id 7)ps u 로그인 id 1)ps e grep telnet 2)pgrep telnet 3)pgrep 로그인 id 4)pgrep l 로그인 id 11
프로세스종료시키기 프로세스의종료 ps 명령으로찾은프로세스중불필요한프로세스를강제로종료시킨다. 프로세스를종료시키면그자식프로세스들도같이종료된다. 프로세스를종료시킬때 PID 나프로세스이름을알아야한다. 프로세스종료시키기 kill pkill 12
시그널 (signal) 시그널 [1/2] 프로세스에게보내는신호 프로세스는이신호에응답한다. 신호무시 프로세스종료등 kill, pkill 명령으로신호를보낸다. man signal 또는 man s 5 signal 로자세한정보를찾아볼수있다. 13
시그널의종류 시그널 [2/2] 시그널번호 시그널이름 기능 기본응답 1 SIGHUP 터미널연결이끊어진경우에발생종료 2 SIGINT 보통 Ctrl-C 에의해발생종료 9 SIGKILL 프로세스를 kill 시킨다. 이시그널은무시할수없다. 종료 15 SIGTERM 프로세스를종료시킨다. 이시그널은무시할수도있다. kill 명령이보내는기본시그널 종료 14
프로세스종료 kill [1/2] 지정한프로세스들에게시그널을보낸다. 사용자가소유한프로세스만종료시킬수있다. root 는모든프로세스를종료시킬수있다. kill 명령은디폴트로 15 번 (SIGTERM) 시그널을보낸다 (soft kill). kill 명령을사용하기전에대상프로세스의 PID 를알고있어야한다 (ps, pgrep 명령사용 ). 시그널 -9 : 강제종료 kill [ 시그널 ] pid 15
사용법 프로세스종료 kill [2/2] kill 15759 soft kill 15759 프로세스에게 SIGTERM 시그널을보낸다. 이것이바람직함 kill 9 15759 sure kill 15759 프로세스에게 SIGKILL 시그널을보낸다. SIGKILL 을받으면프로세스가즉시종료된다. 어떤시그널도무시하는프로세스를종료시킬때유용하다. 16
프로세스종료 pkill [1/2] pgrep 명령과유사하게패턴을이용하여프로세스를찾아해당프로세스에게시그널을보낸다. 사용자가소유한프로세스만종료시킬수있다. root 는모든프로세스를종료시킬수있다. kill 명령은디폴트로 15 번 (SIGTERM) 시그널을보낸다. (soft kill) kill 명령을사용하기전에대상프로세스명을알고있어야한다. (ps, pgrep 명령사용 ) 시그널 -9 : 강제종료 pkill [ 시그널 ] 프로세스명 17
사용법 프로세스종료 pkill [2/2] pkill sleep soft kill sleep 명령을수행하고있는프로세스에게 SIGTERM 시그널을보낸다. pkill 9 sleep sure kill SIGKILL 시그널을보낸다. 18
[ 실습하기 ] 프로세스종료 실습하기 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 19
Section 03 포그라운드와백그라운드 프로세스 UNIX 는다중작업을지원하는운영체제이다. 동시에여러개의작업을수행할수있다. 포그라운드처리 ( 전위처리 ) 사용자가명령을입력한후결과가출력될때까지기다려야하는경우 find / -name passwd 보통의명령처리방법 백그라운드처리 ( 후위처리 ) 명령의처리결과출력과관계없이곧바로프롬프트가출력되어다른작업을계속할수있는경우 명령실행시마지막에 & 를붙임 find /-name passwd & 20
포그라운드와백그라운드작업제어 작업과프로세스 (job & process) job은쉘이관리할수있는프로세스이다. 쉘은 job을시작시키고제어한다. job은프로세스이므로각 job은 PID를가지고있고 또한쉘이할당한일련번호인 job ID도가지고있다. 쉘은동시에여러개의 job이동작하도록할수있다. 포그라운드작업 -> 포그라운드프로세스 백그라운드작업 -> 백그라운드프로세스 작업제어 포그라운드작업 -> 백그라운드작업으로전환 백그라운드작업 -> 포그라운드작업으로전환 작업목록보기 작업정지 / 종료 / 재동작 21
작업제어명령 jobs [1/2] 백그라운드작업을모두출력 특정작업번호를지정할경우해당작업의정보만출력 작업번호 % 번호 : 해당번호의작업정보를출력 %+ 또는 %% : 작업순서가 + 인작업정보를출력 %- : 작업순서가 인작업정보를출력 사용법 jobs [% 작업번호 ] jobs [1] + 실행중 sleep 100 & [2] - 실행중 sleep 200 & jobs %1 [1] + 실행중 sleep 100 & 22
작업제어명령 jobs [2/2] jobs 명령출력항목 항목출력예제의미 작업번호 [1] 작업순서 +, - 상태 실행중 명령 sleep 100& 실행중인명령 작업번호로백그라운드로실행시킬때마다순차적으로증가 ([1],[2],[3]...) 작업순서를표시 + : 가장최근에접근한작업 - : + 작업보다바로전에접근한작업 공백 : 그외의작업 작업의상태를표시 실행중 (Running) : 현재실행중 완료됨 (Done) : 작업이정상적으로종료 종료됨 (Terminated) : 작업이비정상적으로종료 정지 (Stopped) : 작업이잠시중단됨. 23
작업제어명령 - 작업전환 [1/2] 작업전환및종료명령 명령 기능 bg [% 작업번호 ] 현재작업이나특정작업을백그라운드로전환시켜실행 fg [% 작업번호 ] 현재작업이나특정작업을포그라운드로전환시켜실행 ctrl+z 포그라운드작업을중지시키고, 백그라운드의중지된목록으로보냄 stop % 작업번호 백그라운드에서수행중인특정작업을중지 kill %n 특정작업을종료 24
작업제어명령 - 작업전환 [2/2] 사용예 1 sleep 100 ^Z [1] + 정지 (SIGTSTP) sleep 100 bg %1 [1] sleep 100& 포그라운드작업을 ctrl-z 로중지시키고백그라운드로전환시킨다. 2 jobs [1] + 실행중 sleep 100& fg sleep 100 _ jobs 명령으로현재작업을확인한다. 1 번 job : 실행중인상태 포그라운드로다시전환하면프로세스가끝날때까지기다려야한다. 25
[ 실습하기 ] 작업제어명령 실습하기 1)vi /etc/hosts ctrl+z 2)sleep 300& 3)jobs 4)kill %2 5)jobs 6)fg 7)vi 저장후종료 1)sleep 150 & 2)sleep 200 & 3)jobs 4)fg %1 5)^Z 6)jobs 7)stop %2 8)kill %1 9)kill %2 10)jobs 26
작업제어명령 - nohup nohup 백그라운드명령 백그라운드작업을실행시킨단말기가종료되거나사용자가로그아웃하면실행중이던백그라운드작업은함께종료 로그아웃한다음에도백그라운드작업은작업이완료될때까지실행하도록해야할때 nohup 명령사용 명령의실행결과와오류메시지는현재디렉토리에 nohup.out 파일로자동적으로저장 사용예 nohup find / -name passwd & [1] 16454 exit nohup.out 파일에결과저장. 다시로그인해서 nohup.out 파일확인 27
Section 04 사용자정보보기 로그인한사용자정보보기 users, who, w 사용자자신의정보보기 who am i, whoami, id 28
사용자명출력하기 - users users 현재시스템에로그인하고있는사용자명을출력 사용예 users root user1 29
사용자정보출력하기 - who 시스템을사용하고있는사용자의정보를출력 옵션 -q : 사용자명만출력한다. -H : 출력항목의제목도함께출력한다. -b : 마지막으로재부팅한날짜와시간을출력한다. 사용예 who [ 옵션 ] who user1 pts/4 2 월 15 20:34 (220.120.37.160) who -q user1 # users=1 30 who -b.system boot 11 월 6 20:05
사용자작업정보출력하기 - w w [ 사용자명 ] 로그인한사용자정보와현재하고있는작업정보를출력 사용예 w 오후 11:17 현재가동중 101일,3:12,1 user, 로드평균 : 0.00, 0.00, 0.01 사용자터미늘 로그인 @ 휴지 JCPU PCPU 활동 user1 pts/4 오후 8:34 13 40 w 31
사용자자신의로그인정보 who am i who am i who 명령의결과중자신에대한정보만출력 사용예 who am i user1 pts/4 2월 15 20:34 (220.120.37.160) 32
자신의로그인사용자명출력하기 whoami whoami 사용자의로그인 ID 를출력 BSD 계열명령으로 /usr/ucb 디렉토리에있음 사용예 /usr/ucb/whoami user1 33
현재사용자명과그룹정보출력하기 id id [ 옵션 ] 사용자의로그인 ID 와그룹정보를출력 옵션 -a : 기본그룹외에 2 차그룹정보도출력 사용예 id uid=40576(user1) gid=1(other) id -a uid=40576(user1) gid=1(other) groups=1(other), 14(sysadmin) 34
[ 실습하기 ] 사용자정보보기 실습하기 1)who 2)who m 3)who q 4)who H 5)w 6)who am I 7)whoami 8)id 9)id -a 35
[ 실습과제 ] 실습각단계화면캡처하여 pdf 파일로정리하여과제제출 (cms.mmu.ac.kr/bear) 제출기한 : 4 월 26 일자정 36