uv_signal_t — シグナルハンドル¶
シグナルハンドルは、イベントループごとにUnix形式のシグナル処理を実装します。
Windowsに関する注記¶
一部のシグナルの受信をエミュレートします。
SIGINTは、通常、ユーザーがCTRL+Cを押したときに届きます。ただし、Unixと同様に、端末のrawモードが有効な場合は発生しません。
SIGBREAKは、ユーザーがCTRL+BREAKを押したときに届きます。
SIGHUPは、ユーザーがコンソールウィンドウを閉じたときに発生します。SIGHUPを受けたプログラムには、後処理のために約10秒が与えられます。その後、Windowsは無条件にプログラムを終了します。
SIGWINCHは、libuvがコンソールのサイズ変更を検出するたびに発生します。libuvアプリがコンソールエミュレーターで動作している場合や、32ビットのlibuvアプリが64ビットシステムで動作している場合は、SIGWINCHをエミュレートします。この場合、SIGWINCHが常に適時に届くとは限りません。書き込み可能な
uv_tty_tハンドルでは、カーソルが移動したときだけサイズの変更を検出します。読み取り可能なuv_tty_tハンドルを使う場合は、ハンドルがrawモードであり、読み取り中の場合にだけ、コンソールバッファーのサイズ変更を検出します。他のシグナルの監視ハンドルも作成できますが、これらのシグナルを受信することはありません。該当するシグナルは次のとおりです: SIGILL、SIGABRT、SIGFPE、SIGSEGV、SIGTERM、SIGKILL.
raise()やabort()でプログラムからシグナルを発生させても、libuvは検出しません。そのため、シグナルの監視ハンドルは反応しません。
バージョン1.15.0での変更: WindowsのSIGWINCHサポートを改善しました。
バージョン1.31.0での変更: 64ビットWindows上の32ビットlibuvのSIGWINCHサポートを、以前の実装へ戻しました。
Unixに関する注記¶
SIGKILLとSIGSTOPは捕捉できません。
SIGBUS、SIGFPE、SIGILL、SIGSEGVをlibuvで処理すると、未定義動作になります。
SIGABRTをabort()が生成した場合、たとえばassert()経由の場合には、libuvで捕捉しません。
Linuxでは、SIGRT0とSIGRT1(シグナル番号32と33)を、NPTLのpthreadsライブラリーがスレッド管理に使います。これらのシグナルの監視ハンドルを設定すると、予測不能な動作が生じるため、強く非推奨とします。将来のlibuvでは、これらを単に拒否する可能性があります。
データ型¶
-
type uv_signal_t¶
シグナルハンドルの型です。
-
typedef void (*uv_signal_cb)(uv_signal_t *handle, int signum)¶
次の関数へ渡すコールバックの型定義です:
uv_signal_start()。
公開メンバー¶
-
int uv_signal_t.signum¶
このハンドルが監視するシグナルです。読み取り専用です。
関連項目
次の型のuv_handle_tメンバーも適用されます。
API¶
-
int uv_signal_init(uv_loop_t *loop, uv_signal_t *signal)¶
ハンドルを初期化します。
-
int uv_signal_start(uv_signal_t *signal, uv_signal_cb cb, int signum)¶
指定したコールバックでハンドルを開始し、指定したシグナルを監視します。
-
int uv_signal_start_oneshot(uv_signal_t *signal, uv_signal_cb cb, int signum)¶
バージョン1.12.0で追加。
次の関数と同じ機能ですが、
uv_signal_start()とは異なり、シグナルを受信した時点でシグナルハンドラーをリセットします。
-
int uv_signal_stop(uv_signal_t *signal)¶
ハンドルを停止します。以後、コールバックを呼び出しません。
関連項目
次の型のuv_handle_tAPI関数も適用されます。