如何从Python中获取信号的进程ID?

时间:2015-10-21 07:46:36

标签: python unix python-3.x signals

请参阅以下Python代码:

def Handler(signum, frame):
    #do something
signal.signal(signal.SIGCHLD, Handler)

有没有办法获取信号来自的进程ID? 或者是否有另一种方法可以从中获取信号来自的进程ID而不会阻止主要的应用程序流?

2 个答案:

答案 0 :(得分:5)

你不能直接。 Python标准库的信号模块没有提供访问Posix sigaction_t结构的规定。如果你真的需要它,你将不得不用C或C ++构建一个Python扩展。

你会在Extending and Embedding the Python Interpreter找到指针 - 这个文档也应该在你的Python发行版中提供

答案 1 :(得分:1)

os.getpid()返回当前进程ID。因此,当您发送信号时,您可以将其打印出来,例如。

import signal
import os
import time

def receive_signal(signum, stack):
    print 'Received:', signum

signal.signal(signal.SIGUSR1, receive_signal)
signal.signal(signal.SIGUSR2, receive_signal)

print 'My PID is:', os.getpid()

检查this以获取有关信号的更多信息。

要将pid发送到流程,可以使用Pipe

import os
from multiprocessing import Process, Pipe


def f(conn):
    conn.send([os.getpid()])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()   # prints os.getpid()
    p.join()

Exchanging objects between processes