1. 데몬 프로세스 만들기
데몬 프로세스란 백그라운드 프로세스를 말한다. 따라서 부모프로세스가 자식프로세스의 종료코드를 처리하지 않고 죽으면 자식프로세스는 데몬 프로세스가 된다.
예제1) 데몬 프로세스 만들기
(실행결과 : ps로 확인 )
2. 시그널 처리
프로그램 수행중에 여러 사건들이 발생하게 되는데, 예를 들어 부동소주점 에러, 정전, 알람 클럭, 사용자의 종료(ctrl-C), 일시중지(ctrl-Z) 등이 있다. 이런 사건이 발생했다는 것을 해당 프로세스에 알려주는 것이 바로 시그널 이다. .
예제2) 시스널 처리
-> 참고로 ctrl + c 는 SIGINT ( value : 2) 이다.
(실행결과)
데몬 프로세스란 백그라운드 프로세스를 말한다. 따라서 부모프로세스가 자식프로세스의 종료코드를 처리하지 않고 죽으면 자식프로세스는 데몬 프로세스가 된다.
예제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)
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초휘에 자동 종료되었다. 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
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 이며, 발생된 시스널 별로 핸들러를 지정해주어야 한다. 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)
-> 참고로 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 누름.
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 누름.