2

バックグラウンドで長時間実行できる Python スクリプトがあり、そこからステータス更新を取得する方法を見つけようとしています。基本的には、SIGUSR1 シグナルを送信して、ステータスの更新を報告することを検討しています。

Python でシグナルをキャッチすることは問題ではありません。それに関する多くの情報があります。

しかし、シグナルを開始したプロセスに情報を戻すにはどうすればよいでしょうか? 情報を送り返す方法を提供できる、受信プロセスによる開始プロセスのpidを把握する方法がないようです。ここでは 1 つの返信メッセージで十分です (「アップロード中です。現在 55% です。その時点で終了します」という調子で)。継続的な更新は素晴らしいことですが、必須ではありません。

私が思いついたのは、このデータを所定の名前の一時ファイルに書き込むことです-古いファイルを残すという問題があり、その場合は何らかのクリーンアップルーチンが必要です。しかし、それはハックのように聞こえます。利用可能なより良いものはありますか?

実行中のプロセスが通知される方法は問題ではなく、そうである必要はありませんkill -SIGUSR1 pid。それと通信する方法は何でも構いません。メインプロセスの実行後に開始された新しいプロセスから通信を開始できる限り、別のユーザーとして実行されている可能性があります。

4

1 に答える 1

0

シグナルは、データの受け渡しを可能にする一般的なプロセス間通信メカニズムとして設計されていません。通知を提供する以上のことはできません。ターゲットプロセスが応答して行うことはかなり一般的です (たとえば、送信者が見に行くことを知っている特定のファイルへの出力を生成する) が、データを送信者に直接渡すには、パイプ、共有などの別のメカニズムが必要になります。また、一般に、シグナルを受信するプロセスは、シグナルの送信者を特定できないため、どこに応答を送信すればよいかわかりません。

于 2012-10-12T16:52:58.793 に答える