#topicpath


/////////////////////////////////////////////////////////////////////////////////
* 目次 [#k9200455]
#contents();

/////////////////////////////////////////////////////////////////////////////////
* API [#w3f34007]
//===============================================================================
** signal() [#zff999cc]
 include <signal.h>
 
 typedef void (*sighandler_t)(int);
 
 sighandler_t signal(int signum, sighandler_t sighandler);
- ''このシステムコールの使用は避け、 代わりに sigaction(2)  を使用すること。''
- signal()   はシグナル  signum の処理方法を handler に設定する。
- handler には、 SIG_IGN、 SIG_DFL、 プログラマが定義した関数 (「シグナル・ハンドラ」) のアドレスの いずれかを指定する。
- 処理方法が SIG_IGN に設定されている場合、そのシグナルは無視される。
- 処理方法が SIG_DFL に設定されている場合、シグナルに関連づけられた デフォルトの動作が行われる (signal(7)  参照)。
- 処理方法として関数が設定されている場合、まず最初に処理方法が ''SIG_DFL'' にリセットされるかそのシグナルのブロックが実行された後、 signum を引き数として handler が呼び出される。ハンドラが起動される際にシグナルがブロックされた場合、  ハンドラが返る際にそのシグナルのブロックが解除される。
- シグナル ''SIGKILL'' と ''SIGSTOP'' は捕捉できず、無視することもできない。
- マルチスレッドプロセスにおける signal()  の結果は、指定されていない。



//===============================================================================
** sigaction() [#nbb8f9b6]
- sigaction(2) はシグナル・ハンドラが起動される際の挙動を明示的に制御できる。 
- signal()  の代わりにこのインターフェイスを使うこと。
 #include <signal.h>
 
 int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
- signum には、 ''SIGKILL'' と ''SIGSTOP'' 以外の有効なシグナルをどれでも指定できる。


//===============================================================================
** sigprocmask() [#u37b10a0]
- シグナル提供中に割り込みできるシグナルをセットする
 #include <signal.h>
 int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

//===============================================================================
** pthread_sigmask() [#t0b6beda]
- 禁止するシグナルマスクの確認と変更を行う
 #include <signal.h>
 int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);
- -pthread を付けてコンパイルとリンクを行う。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS