IT개발/Python(파이썬)2010. 8. 25. 19:45
1. 데몬 프로세스 만들기

데몬 프로세스란 백그라운드 프로세스를 말한다. 따라서 부모프로세스가 자식프로세스의 종료코드를 처리하지 않고 죽으면 자식프로세스는 데몬 프로세스가 된다.

예제1) 데몬 프로세스 만들기
import os
import time
import sys

class Dummy:
        def write(self, s) :
                pass

if os.fork():
        # Parent-Process
        os._exit(0)

os.setpgrp()                               # 다른 프로세스의 영향을 받지 않기 위해서 독립 그룹
os.umask(0)                              # 파일 모드를 그대로 적용하기 위해서
sys.stdin.close()                       # 콘솔 입출력에 대한 영향을 없애기 위해서 stdin / stdout / stderr 를 모두 다른 곳을 전환
sys.stdout = Dummy()
sys.stderr = Dummy()

# 여기서 부터 데몬 프로그램 작성을 시작하면 된다.
# 이 데몬은 5초후에 자동적으로 종료된다.
time.sleep(5)

(실행결과 : ps로 확인 )
[citylock@nmsfile ~]$ ps -ef |grep make
citylock 27273 26356  0 19:18 pts/1    00:00:00 vim makeDeamonProcess.py
citylock 27298     1  0 19:24 pts/2    00:00:00 /usr/bin/python ./makeDeamonProcess.py
citylock 27300 27229  0 19:24 pts/3    00:00:00 grep make
[citylock@nmsfile ~]$ ps -ef |grep make
citylock 27273 26356  0 19:18 pts/1    00:00:00 vim makeDeamonProcess.py
citylock 27302 27229  0 19:24 pts/3    00:00:00 grep make
=>  ppid 가 1인 데몬 프로세스를 확인할 수 있다. 5초휘에 자동 종료되었다.


2. 시그널 처리

프로그램 수행중에 여러 사건들이 발생하게 되는데, 예를 들어 부동소주점 에러, 정전, 알람 클럭, 사용자의 종료(ctrl-C), 일시중지(ctrl-Z)  등이 있다. 이런 사건이 발생했다는 것을 해당 프로세스에 알려주는 것이 바로 시그널 이다. .

예제2) 시스널 처리
import signal
import time
import sys

def handler(signum, f):
        print signum    # signal 번호를 출력하고 종료
        sys.exit()

signal.signal(signal.SIGINT, handler)
        #  SIGINT : Ctrl + C 를 눌렀을때 발생되는 signal
        # 그때 처리할 핸들러 지정 : handler

while 1:
        print time.ctime()
        time.sleep(1)

=> 이벤트 시그널은 받는 부분은 signal.signal 이며, 발생된 시스널 별로 핸들러를 지정해주어야 한다.
-> 참고로 ctrl + c 는 SIGINT ( value : 2) 이다.

(실행결과)
[citylock@nmsfile thread]$ ./receiveSignal.py
Wed Aug 25 19:40:40 2010
Wed Aug 25 19:40:41 2010
Wed Aug 25 19:40:42 2010
Wed Aug 25 19:40:43 2010
2                                     # ctrl + c  누름.

Posted by 시티락