首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >信号是由孩子处理的,而不是由父进程处理的?

信号是由孩子处理的,而不是由父进程处理的?
EN

Stack Overflow用户
提问于 2014-01-14 13:42:19
回答 1查看 520关注 0票数 0

我生成了几个multiprocessing.Processes来将工作负载分配到不同的进程上。现在,我希望能够通过按Ctrl来关闭整个程序,但是信号只发送给childs,而不是发送到父进程。

我的程序是这样的:

代码语言:javascript
运行
复制
import sys
import multiprocessing
import signal

# ignoring handler, signal.SIG_IGN is not working on windows
def sighandler(signal, frame):
    pass    

# worker thread definiton
def worker():
    signal.signal(signal.SIGINT, sighandler)
    signal.signal(signal.SIGTERM, sighandler)

    # do stuff here...

def main():
    num_procs = 4
    procs = []
    print("Starting up %d processes:" %num_procs)
    for i in range(num_procs):
        print("\tstarting worker %d..." %(i+1))
        p = multiprocessing.Process(target=worker)
        procs.append(p)
        p.start()

    print("All processes started...")
    try:
        for p in procs:
            p.join()
    except KeyboardInterrupt as e:
        print "STOPPING"

        for p in procs:
            p.terminate()

        sys.exit(0)

但是如果我按ctrl键,只会叫4次。当我在父进程中注册信号时,处理程序既不会被调用,KeyboardInterrupt异常也不会工作。我能从里面阻止孩子的进程吗?处理程序中的sys.exit(0)不适合我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-14 13:53:30

你试过使用os._exit(n)吗?

从医生那里:

退出状态为n的进程,而不调用清理处理程序、刷新stdio缓冲区等。 可用性: Unix,Windows。 注意,退出的标准方式是sys.exit(n)。通常,_exit()只应在子进程中使用,而不应在叉()之后使用。

exit

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21115028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档