3

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

どうもありがとう!

4

2 に答える 2

2

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

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

于 2008-09-22T04:36:29.190 に答える
2

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 シグナル ハンドラーよりも非同期性が少し低いことに注意してください。

于 2008-09-22T04:47:24.980 に答える