2012-10-12 25 views
2

我有一個python腳本,可以在後臺運行很長時間,並試圖找到從它獲取狀態更新的方法。基本上我們正在考慮向它發送SIGUSR1信號,然後讓它報告狀態更新。有python進程對話SIGUSR1調用

在Python中捕捉信號不是問題,有關這方面的信息很多。

但是,如何獲取啓動信號的過程的信息?似乎沒有辦法找出接收進程啓動進程的pid,這可能提供一種發回信息的方式。單個回覆消息就足夠了('正忙於上傳,現在55%,將在這樣的時間完成');一個持續的更新會很棒但不是必需的。

我想到的是將這些數據寫入一個具有預定名稱的臨時文件 - 存在將過時的文件拋在後面的問題,並且需要某種清理例程。但是,這聽起來像一個黑客。有更好的可用嗎?

運行過程的信號方式並不重要,它不一定是kill -SIGUSR1 pid。任何與它溝通的方式都可以。只要通信可以從主進程運行後啓動的新進程啓動,可能以不同的用戶運行。

回答

0

信號並非設計成允許傳遞數據的通用進程間通信機制。除了提供通知之外,他們做不了多少事情。目標進程在響應中的作用可能相當普遍(例如,將輸出生成到特定文件中,然後發件人知道要去查看),但將數據直接傳回給發件人需要不同的機制,如管道,共享內存,消息隊列等。另外請注意,一般來說,接收信號的進程並不能真正確定誰發送了信號,因此無論如何它都不知道發送響應的位置。

+0

謝謝,我在閱讀過有關信號之後就已經害怕了。任何其他技術可以做到這一點?否則,我會確實訴諸使用一個tmp文件。 – Wouter