如何在python中处理SIGUSR1

时间:2016-03-17 09:42:57

标签: python-2.7 signals

import os  
import signal  
from time import sleep  

child=[]

for i in range(2):
    pid = os.fork()
    if pid == 0:
        child=[]
        print 'child start,pid',os.getpid()
        break
    else:
        child.append(pid)

if(child):
    def onsig1(a,b):
        print 'onsig1->',a

    signal.signal(signal.SIGCHLD,onsig1)
    signal.signal(signal.SIGUSR1,onsig1)

    try:
        print os.getpid(),' start wait...',str(child)
        while True:
            pid, stat = os.wait()
            print '--->',pid,stat
    except Exception as e:
        print 'error -->',str(e)
else:
    def onsig2(a,b):
        print 'onsig2->',a
    signal.signal(signal.SIGUSR2,onsig2)
    while True:
        sleep(10)
        print os.getpid(),'say ...'

12500开始等待...... [12501,12502]
当我使用'kill -USR2 12501'时,我得到了'onsig2-> 12'并且两个子进程都处于活动状态。我理解这一点 但是当我使用'kill -USR1 12500'时,我得到'onsig1-> 10',但是父进程将会死亡。
我不明白为什么。

1 个答案:

答案 0 :(得分:0)

对不起,我忘记了在尝试阻止时进入

while True:
    try:
        print os.getpid(),' start wait...',str(child)
        while True:
            pid, stat = os.wait()
            print '--->',pid,stat
    except Exception as e:
        print 'error -->',str(e)