signal¶
header¶
#include<signal.h>
method¶
int sigaction(int sig, const struct sigaction *act, struct sigaction *oldact);
struct sigaction {
/* sa_handler. sa_sigactionは片方のみ使う */
void (*sa_handler)(int);
void (*sa_sigaction)(int , siginfo_t*, void*);
sigset_t sa_mask;
int sa_flags;
};
point¶
ハンドラの再設定¶
sgiaction()は、OSにかかわらず シグナルハンドラの設定を保持し続けることが保証されています。
システムコールの再起動¶
sigaction()は、デフォルトではシステムコールを再起動しません。 sa_flagsメンバにSA_RESTARTを追加すると再起動する設定になります。 一般的には再起動される方が便利なので、SA_RESTARTは常に追加しておくのが無難です。
signalで簡単にやる方法¶
任意のSGINALを任意のfuncでトラップする.
signal (SIGNAL, func)
シグナル |
概要 |
---|---|
SIGINT |
キーボードからの割り込み Ctrl + C |
SIGQUIT |
キーボードに夜中止 Ctrl + または Ctrl + 4 |
SIGTSTP |
端末(tty)から入力された一旦停止 Ctrl + Z |
SIGTERM |
終了 (コマンド)kill pid |
SIGSTOP |
一時停止 (コマンド) Kill -s SIGSTOP pid |