python:在进程中捕获SIGINT从套接字

时间:2017-07-11 11:19:22

标签: python multiprocessing signals sigint

我有一个python脚本,我想通过发送一个" SIGINT"使用命令行发信号:

kill -2 <PID>

该脚本生成子进程,然后进入无限循环,尝试从套接字接收数据。我已经安装了信号处理程序,但看起来我的程序没有捕获信号。这是我的代码:

import signal
import multiprocessing

def newBreakHandler(signum, frame):
    global progBreak
    progBreak = True


def runMain():

    client = multiprocessing.Client(<address>)
    # ......

    # Insert break handler
    signal.signal(signal.SIGINT, newBreakHandler)


    while not progBreak:
        try:
            # Some other stuff...
            # ...
            childProc = multiprocessing.Process(target=childProcName)                                                                                                                          
            childProc.start()


            # Main loop
            while not progBreak:
                command = client.recv_bytes()
        except:
            pass

    print "Exiting..."

问题是每当我发送:

kill -2 <PID>

我从未见过&#34;退出&#34;文本打印,PID没有被杀死。我认为这是因为内心&#34;而#34;循环正忙于等待来自客户端的新数据,但是如果客户端没有发送新数据。

有没有办法解决问题?

TIA !!!

1 个答案:

答案 0 :(得分:0)

看起来您的内部循环阻止progBreak检查,此代码对我有用:

import signal

progBreak = False

def newBreakHandler(signum, frame):
    global progBreak
    progBreak = True


def runMain():
    global progBreak

    signal.signal(signal.SIGINT, newBreakHandler)


    while not progBreak:
        while not progBreak and client.poll():
            command = client.recv_bytes()

    print "Exiting..."

runMain()