请参阅以下Python代码:
def Handler(signum, frame):
#do something
signal.signal(signal.SIGCHLD, Handler)
有没有办法获取信号来自的进程ID? 或者是否有另一种方法可以从中获取信号来自的进程ID而不会阻止主要的应用程序流?
答案 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()