C の sighold 関数と sigrelse 関数に相当する Python 関数は何ですか?

StackOverflow https://stackoverflow.com/questions/113170

  •  02-07-2019
  •  | 
  •  

質問

Python シグナル モジュールには、signal.h を使用する C の sighold および sigrelse 関数に似たものはないようです。Python に相当するものはありますか どれでも 選別?

どうもありがとう!

役に立ちましたか?

解決

Python にはこれを直接バインドするものはありません。ctypes を介してアクセスするのは非常に簡単です。ここに例があります。

import ctypes, signal
libc = ctypes.cdll.LoadLibrary("libc.so.6")
libc.sighold(signal.SIGKILL)
libc.sigrelse(signal.SIGKILL)

これらの呼び出しの使い方には詳しくありませんが、Python のシグナル ハンドラーは C とは動作が異なることに注意してください。Python コードがシグナル コールバックにアタッチされると、シグナルはインタープリターの C 側で捕捉され、キューに入れられます。インタプリタは、内部ハウスキーピング (およびスレッド切り替えなど) のために時々中断されます。その割り込み中に、シグナルの Python ハンドラーが呼び出されます。

とはいえ、Python のシグナル処理は通常の C シグナル ハンドラーよりも非同期性が若干低いことに注意してください。

他のヒント

クリティカルセクションからの信号を一時的に「ブロック」する方法はありません (これはすべての Unix フレーバーでサポートされているわけではないため)。

https://docs.python.org/library/signal.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top