리눅스 데몬 및 프로세스 관리
데몬 및 프로세스 관리
1) 프로세스(Process)
리눅스 커널상에서 동작하고 있는 모든 프로그램을 말한다.
프로세스 마다 고유의 PID(Process ID)를 갖는다. 1번 PID는 init이다.
2) 프로세스 작동 상황 알아보기
# ps
# ps -ef
# ps axj | more
* UID, PID, PPID, PGID, SID 컬럼
프로세스를 실행한 시스템 사용자를 보여 준다.
ps aux 명령이나 ps -ef 명령을 사용하면 해당 프로세스를 실행시킨 사용자를 확인할 수 있다.
PPID : 부모 프로세스의 PID
* 접속 터미널 TTY 컬럼
프로세스를 제어하는 터미널 모드
로컬로그인시 tty+가상터미널수
원격로그인이나 엑스 터미널 로그인시 pts/번호 ( ? 표시는 tty와는 무관하게 작동하는 것)
*프로세스 상태STAT 컬럼
3개의 필드로 구성되어 프로세스 상태를 보여준다.
>> 첫 번째 필드
D io와 같이 중지(interrupt)시킬 수 없는 잠자고 있는 (휴지) 프로세스 상태
R 현제 동작중이거나 동작할 수 있는 상태
S 잠자고 있지만, 중지시킬수 있는 상태
T 작업 제어 시그널로 정지되었거나 추적중에 있는 프로세스 상태
X 완전히 죽어 있는 프로세tm
Z 죽어 있는 좀비 프로세스
>> 두 번째 필드
< 프로세스의 우선 순위가 높은 상태
N 프로세스의 우선 순위가 낮은 상태
L 실시간이나 기존 IO를 위해 메모리 안에 잠겨진 페이지를 가진 상태
s 세션 리터(주도 프로세스)
I 멀티 쓰레드
+ 포어그라운드 상태로 동작하는 프로세스
좀비 프로세스 : Z로 되어 있는 프로세스는 작동이 잘못 되어 죽어 있는 프로세스이다. 제거 필요.
* STIME, TIME 컬럼
프로세스 실행시간, 프로세스가 총 소비한 시간
* CMD 컬럼
프로세스의 명령(Command)을 의미
3) 프로세스 죽이기
>> kill 명령이 가지고 있는 시그널 종류 살펴 보기
# kill -l
>> 프로세스 종료 시키기
# kill [-시그런 번호 또는 시그널] PID
>> STAT가 D로 표시된 프로세스 종료 시키기
# kill -SIGKILL pid 또는 # kill -9 pid
>> 프로세스를 멈추지 않고 재 실행하기
# kill -SIGHUP pid 또는 kill -1 pid
>> 데몬의 PID값 확인하기
# ps ax | grep 프로세스명
4) 백그라운드(Background) 작업과 포어그라운드(Forefround) 작업
>> MC프로세스 백그라운드에서 실행 하기
# mc &
>> 백그라운드에서 실행되고 있는지 확이낳기
# jobs
>> 백그라운드에서 포그라운드로 전환
# fg % 작업번호
>> 포그라운드에서 백그라운드로 작업 전환
일시 중단(Ctrl + Z) 후
# bg % 작업번호
주의1: Ctrl +Z명령은 프로그램이 일시 중지 된 상태이므로 바로 Shutdown 명령을 내려서는 안된다.
주의2: 백그라운드에서 실행중인 프로세스는 kill명령을 사용하여 종료 시켜야 한다.(Ctrl + C는 안됨)
# kill %1
5) 프로세스 상태 살펴보기
-> pstree (프로세스 상태를 트리 구조로 보여 주는 명령)
# pstree | grep
형식 : pstree [-옵션] [pid | usr]
-a 명령 라인 인수를 보여 줌
-c 동일한 하위 트리를 축약하지 않음
-h 현재 작동중인 자식 프로세스와 부모 프로세스를 하이라이트 시킴
-n PID 순서로 프로세스를 정렬함
-p PID를 함께 트리 구조에 보여 줌
-> top (CPU를 많이 점유하는 프로세스들을 실시간으로 점검, 상당히 유용하다)
형식 : top [-] [d day] [p pid] [q] [c] [C] [S] [s] [i] [b]0
d 스크린을 생신할 때의 지연 시간
p 주어진 pid에 대한 프로세스만 모니터링
q 지연 시간 없이 스크린 갱신
s 보안 모드로 top 실행
i idle및 zombie 프로세스는 무시함
c 명령 라인 모두 보여 줌
>> 프로세스에 대한 각종 정보에 대한 필드 값
PRI 해당 프로세스의 우선권을 말한다(priority)
NI 해당 프로세스의 nice값을 말한다.
SHARE 공유 메모리 양
-> nohup (부모 프로세스가 죽더라도 자식 프로세스가 죽지 않도록 하는 명령)
nohup 명령 &
-> 프로세스 실행 우선 순위 예약
nice -n 명령
# top &
# nice -15 mc &
# ps -l
6) 데몬 관리
-> ntsysv (부트스크립트를 관리해 주는 콘솔상의 크래픽 도구)
ntsysv에서 체크할 수 있는 파일들 /etc/rc.d/init.d 디렉토리에 스크립트 형태로 존재하고 있어야 한다.
다음 두줄의 형식을 갖추어야 ntsysv의 체크 목록에 추가될 수 있다.
# chkconfig: 345 91 35
# description : 스크립트 설명
-> chkconfig
chkconfig –list [name]
chkconfig –add name
chkconfig –del name
chkconfig [–level levels] name <onlofflreset>
chkconfig [–level levels] name
# chkconfig –list | more
# chkconfig –list | grep xfs
>> 스크립트가 해당 레벨에서 실행 되지 않도록 하려면
# chkconfig –level 2 xfs off
-> system-config-services
X-window 상에서 Alt+F2키를 눌러 실행창에 system-config-services 명령을 입력하여 실행시킨다.
5. 데몬 활용
1) at 데몬 (작업 스케줄 예약 처리 기능)
# at -h
>> 옵션
-q queue 단일 문자로 [a-z] 또는 [A-Z]까지 큐를 지정합니다. a큐는 at의 디폴트 큐를 나타냅
니다.대문자일때 낮은 우선 순위를 가집니다.
-m 작업이 완료되어 사용자에게 메일로 알려 줍니다.
-f file 표준 입력보다는 오히려 파일로부터 작업을 읽어 들입니다.
-l atq 명령과 같으며, 사용자의 처리될 작업 리스트를 보여 줍니다. 만일 사용자가 수퍼
유저일 경우 모든 작업 리스트가 출력됩니다.
-c job 커맨드 라인상에 있는 작업을 표준 입력으로 저장 합니다.
TIME 시간 지정은 HHMM 또는 HH:MM형식으로 am, pm으로 구분하여 표시할 수 있습니다.
날짜의 경우는 월 일 형식으로 표시할 수있고, MMDDYY, MM/DD/YY, MM.DD.YY 형
식으로 표실 할 수 있습니다.
# /etc/init.d/atd restart
at 시간 요일
at> 스케줄 명령
at> Ctrl+D키를 눌러 스케줄 예약
>> 예제
(오후 10시 작업(재부팅) 예약)
# at 10:00pm today
at> shutdown -r now
at> <EOT>
job 4 at 2008-01-28 22:00
>> at 사용자 제한
# cat > /etc/at.allow
redfox
bluefox
>> at 작업 확인
# atq
>> at 큐 작업 제거
# atrm 4 5
# atq
2) cron 데몬
>> cron 데몬 띄우기
# /etc/init.d/cron restart
>> cron 데몬 제어 파일 crontab
# crontab –help
# crontab -l (-소문자 엘)
# crontab -e (vi 에디터가 실행 됨)
형식 : [분] [시] [일] [월] [요일] [작업내용]
30 10 * * * /home/redfox/back.sh
로 지정후 저장하면 /home/dumca 디렉토리에 있는 back.sh를 실행하라는 작업 내용.
/var/spool/cron 디렉토리에 사용자 파일명으로 저장 됨. crontab -l 명령으로 cron의 작업 리스트를 확
인 가능.
crontab의 작업 명령을 취소하거나 제거 하려면 -r 옵션을 사용
# crontab -r
# frontab -l
2 Responses
… [Trackback]
[…] Read More to that Topic: nblog.syszone.co.kr/archives/3394 […]
… [Trackback]
[…] Read More on on that Topic: nblog.syszone.co.kr/archives/3394 […]