請參閱下面的Python代碼:如何獲取Python中傳入信號的進程ID?
def Handler(signum, frame):
#do something
signal.signal(signal.SIGCHLD, Handler)
有沒有辦法擺脫它是從哪裏來的信號處理ID? 或者還有另外一種方法來獲取來自哪個信號的進程ID而不阻塞主應用程序的流程?
請參閱下面的Python代碼:如何獲取Python中傳入信號的進程ID?
def Handler(signum, frame):
#do something
signal.signal(signal.SIGCHLD, Handler)
有沒有辦法擺脫它是從哪裏來的信號處理ID? 或者還有另外一種方法來獲取來自哪個信號的進程ID而不阻塞主應用程序的流程?
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()
你不能直接。 Python標準庫的信號模塊沒有規定允許訪問Posix sigaction_t
結構。如果你真的需要這個,你將不得不在C或C++中構建一個Python擴展。
你會發現的指針在Extending and Embedding the Python Interpreter - 這個文件也應該是提供您的Python發行
Serge,謝謝! –
在我看來,這應該是被接受的答案。 – sitaktif
感謝您的答覆!但是我想識別在接收端發送信號的過程的pid。 –
然後你可以使用類似'Pipe'的東西。我會添加一些代碼給答案 – dkol
dkol,非常感謝! –