Chapter 06. 프로세스관리하기
00. 개요 01. 프로세스의개념 02. 프로세스관리명령 03. 포그라운드, 백그라운드프로세스와작업제어 04. 작업예약
프로세스가무엇인지설명할수있다. 프로세스목록을확인하고특정프로세스를검색할수있다. 프로세스를강제로종료할수있다. 프로세스관리도구로전체프로세스의상태를확인할수있다. 포그라운드와백그라운드작업의차이를설명할수있다. 백그라운드로작업을실행하고포그라운드로변환할수있다. 정해진시간에혹은주기적으로명령이실행되도록설정할수있다.
리눅스실습스터디맵
00 개요 [ 그림 6-1] 6 장의내용구성
01 프로세스의개념 프로세스 : 현재시스템에서실행중인프로그램 프로세스의부모 - 자식관계 프로세스는부모 - 자식관계를가지고있음 필요에따라부모프로세스 (paret process) 는자식프로세스 (child process) 를생성하고, 자식프로세스는또다른자식프로세스생성가능 부팅할때스케줄러가실행한프로세스인 systemd 와 kthreadd 프로세스를제외하면모든프로세스는부모프로세스를가지고있음 자식프로세스는할일이끝나면부모프로세스에결과를돌려주고종료 프로세스의번호 각프로세스는고유한번호를가지고있는데이것이 PID
01 프로세스의개념 프로세스의종류 데몬프로세스 특정서비스를제공하기위해존재하며리눅스커널에의해실행 고아프로세스 자식프로세스가아직실행중인데부모프로세스가먼저종료된자식프로세스는고아 (orpha) 프로세스 1 번프로세스가고아프로세스의새로운부모프로세스가되어고아프로세스의작업종료지원 좀비프로세스 자식프로세스가실행을종료했는데도프로세스테이블목록에남아있는경우 좀비프로세스는프로세스목록에 defuct 프로세스라고나오기도함 좀비프로세스가증가하면프로세스테이블의용량이부족해서일반프로세스가실행되지않을수도있음
02 프로세스관리명령 프로세스목록보기 현재실행중인프로세스의목록을보는명령 : ps 유닉스 (SVR4) 옵션 : 묶어서사용할수있고, 붙임표로시작한다 ( 예 : -ef). BSD 옵션 : 묶어서사용할수있고, 붙임표로시작하지않는다 ( 예 : aux). GNU 옵션 : 붙임표두개로시작한다 ( 예 : --pid).
02 프로세스관리명령 현재단말기의프로세스목록출력하기 : ps ps 명령을옵션없이사용하면현재셸이나터미널에서실행한사용자프로세스에대한정보를출력 ps PID TTY TIME CMD 26343 pts/1 00:00:00 bash 26489 pts/1 00:00:00 ps 프로세스의상세정보출력하기 : -f 옵션 프로세스의상세한정보를출력 : PPID 와터미널번호, 시작시간등 ps -f UID PID PPID C STIME TTY TIME CMD user1 26343 26342 0 07:49 pts/1 00:00:00 -bash user1 26497 26343 0 07:52 pts/1 00:00:00 ps -f
02 프로세스관리명령 터미널에서실행한프로세스의정보출력하기 : a 옵션 터미널에서실행한프로세스의정보를출력 ps a PID TTY STAT TIME COMMAND 644 tty1 Ssl+ 73:03 /usr/bi/xorg :0 -backgroud oe -verbose -auth /var 24678 pts/0 Ss+ 0:08 bash 26343 pts/1 Ss 0:00 -bash 26405 pts/2 Ss 0:00 -bash 26462 pts/2 S+ 0:00 ma ps 26475 pts/2 S+ 0:00 less -s 26488 pts/1 R+ 0:00 ps a
02 프로세스관리명령 터미널에서실행한프로세스의상세정보출력하기 : a 옵션과 u 옵션 a 옵션과 u 옵션을함께사용하면터미널에서실행한프로세스의상세정보를출력 : CPU 와메모리사용량등 ps au USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 644 0.5 1.6 159268 16764 tty1 Ssl+ 3 월16 73:05 /usr/bi/xorg user1 24678 0.0 0.1 115012 1844 pts/0 Ss+ 3 월18 0:08 bash user1 26343 0.1 0.2 115008 2948 pts/1 Ss 07:49 0:00 -bash user1 26405 0.1 0.2 115008 2944 pts/2 Ss 07:49 0:00 -bash user1 26462 0.2 0.2 118060 2084 pts/2 S+ 07:50 0:00 ma ps user1 26475 0.0 0.0 108952 856 pts/2 S+ 07:50 0:00 less -s user1 26510 0.0 0.1 111524 1220 pts/1 R+ 07:53 0:00 ps au
02 프로세스관리명령 전체프로세스목록출력하기 ( 유닉스옵션 ) : -e 옵션 -e 옵션은시스템에서실행중인모든프로세스를출력 TTY 의값이? 인것은대부분데몬으로시스템이실행한프로세스 ps -e more PID TTY TIME CMD 1? 00:03:11 systemd 2? 00:00:01 kthreadd 3? 00:00:09 ksoftirqd/0 ( 생략 ) 23? 00:00:01 khubd 24? 00:00:00 md 28? 00:06:15 kswapd0 --More-- -ef 옵션사용 : 전체프로세스의더자세한정보출력 ps -ef more UID PID PPID C STIME TTY TIME CMD root 1 0 0 3월16? 00:03:11 /usr/lib/systemd/systemd --switch ed-root --system --deserialize 21 root 2 0 0 3월16? 00:00:01 [kthreadd] root 3 2 0 3 월16? 00:00:09 [ksoftirqd/0] ( 생략 ) root 24 2 0 3월16? 00:00:00 [md] --More--
02 프로세스관리명령 전체프로세스목록출력하기 (BSD 옵션 ) : ax 옵션 시스템에서실행중인모든프로세스를출력 ps ax more PID TTY STAT TIME COMMAND 1? Ss 3:11 /usr/lib/systemd/systemd --switched-root --system --d eserialize 21 2? S 0:01 [kthreadd] 3? S 0:09 [ksoftirqd/0] ( 생략 ) 23? S 0:01 [khubd] 24? S< 0:00 [md] --More-- aux 옵션은 -ef 처럼시스템에서실행중인모든프로세스에대한자세한정보를출력 ps aux more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 51316 3456? Ss 3 월16 3:11 /usr/lib/syste md/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0? S 3 월16 0:01 [kthreadd] root 3 0.0 0.0 0 0? S 3 월16 0:09 [ksoftirqd/0] ( 생략 ) root 23 0.0 0.0 0 0? S 3 월16 0:01 [khubd] root 24 0.0 0.0 0 0? S< 3 월16 0:00 [md] --More--
02 프로세스관리명령 특정사용자의프로세스목록출력하기 : -u 옵션 ps -u user1 PID TTY TIME CMD 1235? 00:00:11 gome-keyrig-d 1237? 00:00:41 gome-sessio 1248? 00:00:00 dbus-lauch 1249? 00:00:46 dbus-daemo 1275? 00:00:00 imsettigs-daem 1278? 00:00:03 gvfsd ( 생략 ) 더상세한정보를보고싶으면 -f 옵션을함께사용 ps -fu user1 UID PID PPID C STIME TTY TIME CMD user1 1235 1 0 3월16? 00:00:11 /usr/bi/gome-keyrig-daemo -- user1 1237 1225 0 3월16? 00:00:41 gome-sessio user1 1248 1 0 3월16? 00:00:00 dbus-lauch --sh-sytax --exit-w user1 1249 1 0 3월16? 00:00:46 /bi/dbus-daemo --fork --prituser1 1275 1 0 3월16? 00:00:00 /usr/libexec/imsettigs-daemo user1 1278 1 0 3월16? 00:00:03 /usr/libexec/gvfsd ( 생략 )
02 프로세스관리명령 특정프로세스정보출력하기 : -p 옵션 -p 옵션과함께특정 PID 를지정하면해당프로세스의정보를출력 ps -fp 24678 UID PID PPID C STIME TTY TIME CMD user1 24678 24671 0 3월18 pts/0 00:00:08 bash ps 명령을이용해특정프로세스정보검색하기 ps 명령과 grep 명령을 로연결하여특정프로세스에대한정보를검색 ps -ef grep bash root 594 1 0 3월16? 00:04:14 /bi/bash / usr/sbi/ksmtued user1 24678 24671 0 3월18 pts/0 00:00:08 bash user1 26343 26342 0 07:49 pts/1 00:00:00 -bash user1 26405 26404 0 07:49 pts/2 00:00:00 -bash user1 27374 26343 0 09:53 pts/1 00:00:00 grep --color=auto bash
02 프로세스관리명령 pgrep 명령을이용해특정프로세스정보검색하기 bash 패턴을지정하여검색한예 pgrep -x bash 24678 26343 26405
02 프로세스관리명령 pgrep 명령을이용해특정프로세스정보검색하기 pgrep 의경우 -l 옵션을지정해도단지 PID 와명령이름만출력 pgrep -l bash 24678 bash 26343 bash 26405 bash 더자세한정보를검색하려면 pgrep 명령을 ps 명령과연결하여사용 ps -fp $(pgrep -x bash) UID PID PPID C STIME TTY STAT TIME CMD user1 24678 24671 0 3 월 18 pts/0 Ss+ 0:08 bash user1 26343 26342 0 07:49 pts/1 Ss 0:01 -bash user1 26405 26404 0 07:49 pts/2 Ss 0:00 -bash -u 옵션으로사용자명을지정하여검색 ps -fp $(pgrep -u user1 bash) UID PID PPID C STIME TTY STAT TIME CMD user1 24678 24671 0 3월18 pts/0 Ss+ 0:08 bash user1 26343 26342 0 07:49 pts/1 Ss 0:01 -bash user1 26405 26404 0 07:49 pts/2 Ss+ 0:01 -bash
02 프로세스관리명령 kill 명령을이용해프로세스종료하기 kill 예 : ma 을실행시킨프로세스를찾아서종료시키기 ps -fp $(pgrep -x ma) UID PID PPID C STIME TTY TIME CMD user1 28497 26343 0 12:15 pts/1 00:00:00 ma ps kill 28497
02 프로세스관리명령 프로세스강제로종료하기 단순히 kill 명령으로는종료되지않는경우강제종료시그널인 9 번을보낸다. 강제종료예 : kill 명령으로종료되지않음 ps -fp $(pgrep -x sh) UID PID PPID C STIME TTY TIME CMD user1 29540 26343 0 14:35 pts/1 00:00:00 sh kill 29540 ps -fp $(pgrep -x sh) UID PID PPID C STIME TTY TIME CMD user1 29540 26343 0 14:35 pts/1 00:00:00 sh 강제종료시그널인 9 번을보내강제로종료 kill -9 29540
02 프로세스관리명령 pkill 명령을이용해프로세스종료하기 PID 가아니라프로세스의명령이름 (CMD) 으로프로세스를찾아종료 ps -fp $(pgrep -x ma) UID PID PPID C STIME TTY STAT TIME CMD user1 29732 26343 0 14:52 pts/1 S+ 0:00 ma pkill user1 29751 26405 0 14:52 pts/2 S+ 0:00 ma pkill ps -fp $(pgrep -x ma) UID PID PPID C STIME TTY STAT TIME CMD user1 29732 26343 0 14:52 pts/1 S+ 0:00 ma pkill user1 29751 26405 0 14:52 pts/2 S+ 0:00 ma pkill
02 프로세스관리명령 프로세스관리도구 top 명령 : 현재실행중인프로세스에대한정보를주기적으로출력 top 내부명령
02 프로세스관리명령 top 실행화면
02 프로세스관리명령 시스템정보 : GNOME
03 포그라운드, 백그라운드프로세스와작업제어 포그라운드작업 포그라운드프로세스 : 사용자가입력한명령이실행되어결과가출력될때까지기다려야하는포그라운드방식으로처리되는프로세스 이를작업제어에서는포그라운드작업이라고함 sleep 100 포그라운드작업 sleep 명령이끝날때까지기다려야한다. 백그라운드작업 백그라운드프로세스 : 명령을실행하면명령의처리가끝나는것과관계없이곧바로프롬프트가출력되어사용자가다른작업을계속할수있음 작업제어에서는백그라운드작업이라고함 sleep 100 & 백그라운드작업 프롬프트가바로나와다른명령을실행가능 백그라운드작업과출력방향전환하기 백그라운드로처리할때는주로출력과오류방향전환을하여실행결과와오류메시지를파일로저장 fid / -ame passwd > pw.dat 2>&1 & pw.dat 에결과와오류저장
03 포그라운드, 백그라운드프로세스와작업제어 작업제어 작업제어는작업전환과작업일시중지, 작업종료를의미 작업전환 : 포그라운드작업-> 백그라운드작업, 백그라운드작업-> 포그라운드작업으로전환 작업일시중지 : 작업을잠시중단 작업종료 : 프로세스를종료하는것처럼작업을종료 작업목록보기 : jobs
03 포그라운드, 백그라운드프로세스와작업제어 jobs 명령예 jobs [1]- Ruig sleep 100 & [2]+ Ruig fid / -ame passwd > pw.dat 2>&1 &
03 포그라운드, 백그라운드프로세스와작업제어 작업전환하기 작업전환예 : 포그라운드 -> 백그라운드 jobs 백그라운드작업이없다. sleep 100 포그라운드로실행한다. ^Z Ctrl+z로일시중지한다. [1]+ Stopped sleep 100 일시중지된상태이다. bg %1 백그라운드로전환한다. [1]+ sleep 100 & jobs [1]+ Ruig sleep 100 & 백그라운드로실행중이다.
03 포그라운드, 백그라운드프로세스와작업제어 작업전환하기 작업전환예 : 백그라운드 -> 포그라운드 jobs [1]+ Ruig sleep 100 & fg 포그라운드로전환한다. sleep 100 포그라운드로실행중이다. 작업종료하기 : Ctrl+c 포그라운드작업은 Ctrl+c 를입력하면대부분종료 sleep 100 포그라운드로실행중이다. ^C 강제종료한다. 백그라운드작업은 kill 명령으로강제종료 : PID 또는 % 작업번호 sleep 100& 백그라운드로실행중이다. [1] 39403 kill %1 강제종료한다. [1]+ 종료됨 sleep 100 Eter키를입력해야메시지가출력된다.
03 포그라운드, 백그라운드프로세스와작업제어 로그아웃후에도백그라운드작업계속실행하기 : ohup 로그아웃한다음에도작업이완료될때까지백그라운드작업을실행해야할경우가있다. 이때 ohup 명령을사용 ohup 명령사용예 ohup fid / -ame passwd & [1] 39563 ohup: igorig iput ad appedig output to ' ohup.out' exit 다시로그인하여파일내용확인 more ohup.out fid: '/usr/lib/firewalld': 허가거부 fid: '/usr/share/polkit-1/rules.d': 허가거부 /usr/share/bash-completio/completios/passwd fid: '/usr/lib64/audit': 허가거부 /usr/bi/passwd ( 생략 )
03 포그라운드, 백그라운드프로세스와작업제어 로그아웃후에도백그라운드작업계속실행하기 : ohup 명령실행시다음예와같이출력방향전환을하면 ohup.out 파일을생성하지않고지정한파일에결과와오류메시지를출력 ohup fid / -ame passwd > pw.dat 2>&1 & [1] 39439 exit 다시로그인하여파일내용확인 more pw.dat ohup: igorig iput fid: '/usr/lib/firewalld': 허가거부 fid: '/usr/share/polkit-1/rules.d': 허가거부 /usr/share/bash-completio/completios/passwd fid: '/usr/lib64/audit': 허가거부 /usr/bi/passwd ( 생략 )
04 작업예약 특정한시간에작업을수행하도록예약할수있는두가지방법 정해진시간에한번만수행 정해진시간에반복수행 정해진시간에한번실행
04 작업예약 at 명령설정하기 at 명령을사용하여정해진시간에명령을실행하도록예약하려면 at 명령뒤에시간을명시 [user1@localhost ch6]$ at 09:00 am at> 시간을지정하는형식 at 4pm + 3 days : 지금부터 3일후오후 4시에작업을수행한다. at 10am Jul 31 : 7월 31일오전 10시에작업을수행한다. at 1am tomorrow : 내일오전 1시에작업을수행한다. at 10:00am today : 오늘오전 10시에작업을수행한다. at로실행할명령은기본적으로표준입력으로지정 : 명령의입력을마치려면 ctrl+d 입력 [user1@localhost ch6]$ at 09:00 am 시간을지정한다. at> ls -l ~user1 실행할명령을지정한다. at> <EOT> Ctrl+d를입력하여종료한다. job 1 at Su May 5 09:00:00 2013 작업예약을완료한다. [user1@localhost ch6]$
04 작업예약 at 명령의실행결과확인하기 at 명령의실행결과는메일로전달 [user1@localhost ch6]$ You have mail i /var/spool/mail/user1 [user1@localhost ch6]$ [user1@localhost ch6]$ mail Heirloom Mail versio 12.5 7/5/10. Type? for help. "/var/spool/mail/user1": 1 message 1 ew >N 1 user1 Su May 5 09:00 30/1441 "Output from your job " & Message 1: From user1@localhost.localdomai Su May 5 09:00:07 2013 Retur-Path: <user1@localhost.localdomai> Date: Su, 5 May 2013 09:00:02 +0900 From: user1 <user1@localhost.localdomai> Subject: Output from your job 1 To: user1@localhost.localdomai Status: R 합계 128 drwxrwxr-x. 7 user1 user1 4096 5월 4 21:13 liux_ex -rw-------. 1 user1 user1 40523 5월 4 21:09 ohup.out ( 생략 )
04 작업예약 at 작업파일확인하기 at 로생성된작업파일은 /var/spool/at 디렉터리에저장 [user1@localhost ch6]$ at 11:10 am at> ls at> <EOT> job 2 at Su May 5 11:10:00 2013 [user1@localhost ch6]$ [root@localhost at]# ls -l 합계 8 -rwx------. 1 user1 user1 2771 5월 5 10:59 a00002015bd442 drwx------. 2 daemo daemo 4096 5월 5 09:00 spool [root@localhost at]# root 사용자만 /var/spool/at 디렉터리내용확인가능
04 작업예약 at 작업목록확인하기 : -l 옵션, atq at 명령으로설정된작업의목록은 -l 옵션으로확인 [user1@localhost ch6]$ at -l 2 Su May 5 11:10:00 2013 a user1 [user1@localhost ch6]$ atq 명령으로도확인가능 [user1@localhost ch6]$ atq 2 Su May 5 11:10:00 2013 a user1 [user1@localhost ch6]$
04 작업예약 at 작업삭제하기 : -d 옵션, atrm at 명령으로설정한작업이실행되기전에삭제하려면 -d 옵션을사용하고삭제할작업번호를지정 1 작업예약 [user1@localhost ch6]$ at -l 2 Su May 5 11:10:00 2013 a user1 [user1@localhost ch6]$ 2 설정된작업확인 [user1@localhost ch6]$ atq 4 Su May 5 22:00:00 2013 a user1 3 Mo May 6 01:00:00 2013 a user1 [user1@localhost ch6]$ 3 작업삭제 [user1@localhost ch6]$ at -d 3 [user1@localhost ch6]$ atrm 4 [user1@localhost ch6]$ atq [user1@localhost ch6]$
04 작업예약 at 명령사용제한하기 관련된파일 : /etc/at.allow 와 /etc/at.dey /etc/at.allow 파일과 /etc/at.dey 파일에는한줄에사용자이름을하나씩만기록 /etc/at.allow 파일이있으면이파일에있는사용자만 at 명령을사용할수있다. 이경우에 /etc/at.dey 파일은무시된다. /etc/at.allow 파일이없으면 /etc/at.dey 파일에지정된사용자를제외한모든사용자가 at 명령을사용할수있다. 만약두파일이모두없다면 root 만 at 명령을사용할수있다. 한사용자가두파일모두에속해있다면그사용자는 at 명령을사용할수있다. /etc/at.allow 파일이적용되기때문이다. /etc/at.dey 를빈파일로두면모든사용자가 at 명령을사용할수있는데, 이것이초기설정이다. at.dey 파일에 user1 사용자가기록되어있다면 at 명령을실행했을때사용권한이없다는메시지가출력 [user1@localhost ch6]$ at You do ot have permissio to use at. [user1@localhost ch6]$
04 작업예약 정해진시간에반복실행 crotab 파일형식
04 작업예약 crotab 파일생성하고편집하기 : crotab e crotab 편집기는기본적으로 VISUAL 또는 EDITOR 환경변수에지정된편집기를사용 [user1@localhost ch6]$ EDITOR= vi;export EDITOR crotab -e 명령으로편집한파일을저장하면자동적으로 /var/spool/cro 디렉터리에사용자이름으로생성 [root@localhost spool]# ls -l 합계 52 ( 생략 ) drwx------. 2 root root 4096 5월 5 12:53 cro ( 생략 ) [root@localhost spool]# crotab 파일내용확인하기 : crotab l [user1@localhost ch6]$ crotab -l 30 23 1 * * /usr/bi/ls -l ~user1 > ~user1/cro.out [user1@localhost ch6]$ crotab 파일삭제하기 : crotab -r [root@localhost ~]# crotab -u user1 -r [root@localhost ~]# crotab -u user1 -l o crotab for user1 [root@localhost ~]#
04 작업예약 crotab 명령사용제한하기 /etc/cro.allow, /etc/cro.dey 파일 cro.dey 파일은기본적으로있지만 cro.allow 파일은관리자가만들어야함 두파일이적용되는기준 /etc/cro.allow 파일이있으면이파일안에있는사용자만 crotab 명령을사용할수있다. /etc/cro.allow 파일이없고 /etc/cro.dey 파일이있으면이파일에사용자계정이없어야 crotab 명령을사용할수있다. /etc/cro.allow 파일과 /etc/cro.dey 파일이모두없다면시스템관리자만 crotab 명령을사용할수있다. 두파일이모두없는데일반사용자가 crotab 명령을사용하려고하면다음과같은메시지가출력 [user1@localhost ch6]$ crotab -e You (user1) are ot allowed to use this program ( crotab) See crotab(1) for more iformatio [user1@localhost ch6]$