在freebsd上处理python多线程程序中的信号

时间:2015-10-31 14:39:14

标签: python freebsd python-multithreading

我通过python中的多处理和线程模块编写程序。我使用信号来处理终止进程和线程。它适用于Linux,但我在FreeBSD上遇到了问题。

我有一个创建其他流程的主流程:

pr = Process(target=myprocess, args=(queue,))
pr.start()

myprocess课程中我创建一个帖子:

tr = mythread(queue)
tr.start()
tr.join()

并使用信号终止进程和线程:

signal(SIGTERM, terminate)

def terminate(num, frame):
    pr.terminate()

用于终止线程,我在myprocess class:

中编写了这个方法
signal(SIGTERM, terminate)

def terminate(num, frame):
    tr.terminate()

mythread课程中我有terminate这样的方法:

def terminate():
    exit(0) 

我在Unix上阅读了python中的sigmask,我测试了它,但它没有用。

我的进程没有收到SIGTERM,也没有调用terminate类的myprocess方法来终止该帖子。

1 个答案:

答案 0 :(得分:0)

我无法弄明白,但我用另一种方法来杀死这个过程。

我在一个文件中编写了进程pid,然后使用os.kill(pid, SIGKILL)来终止进程。我将线程设置为守护进程,以便在父进程终止时终止。