シグナル
シグナル(Signal)
プロセスに対してイベント通知、非同期処理の仕組み
プロセス間通信の仕組みの一つでもある
詳細は下記が詳しい
Linux シグナルの基本と仕組み (カーネル v5.5 時点) #まとめ - Qiita
使われているシグナルの例:
Ctrl + cを押したときにSIGINT
SIGINT: Ctrl+C や Del キーを押したときに発生する割り込みシグナル
INT: interrupt
kill -9 <proc_id>のときのSIGKILL
SIGKILL: プロセスを強制終了させるためのシグナル
Ctrl + zを押したときのSIGTSTP
TSTP: terminal stop
code:c
#include <signal.h>
typedef void (*sighandler_t)(int);
// signal()はLinuxのバージョンによって動作が違う場合があるので
// 移植性を求める場合はsigactionを使用した方がよい
sighandler_t signal(int signum, sighandler_t sighandler);
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);
signal()、sigset()などの関数はSystem V シグナルのAPI
sigaction()、sigprocmask()などの関数はPOSIX シグナルのAPI
シグナルハンドラー内でprintfは使っていけないとのこと
理由としてはリエントラント(再入可能)な関数でないとデッドロックなどの再現しにくいバグを起こしてしまう
関連:
シグナル安全(signal-safety)
非再入可能性
非同期安全な関数
スレッドセーフ
実際に安全なAPIは下記を見る
signal-safety(7) - Linux manual page
シグナルを使用するコマンド
trap(コマンド)
kill
サンプルコードは下記のページで
System V シグナル
POSIX シグナル
関連
Single UNIX Specification, Version 3
Single UNIX Specification, Version 4
C標準ライブラリ
関数ポインタ
Plan 9
イベント駆動型プログラミング
イベント駆動
マルチスレッド・プログラミング
レースコンディション
デッドロック
プロセスグループ
コアダンプ
stty
確認用
Q. シグナルとは
Q. シグナルの使い方
Q. シグナルの標準動作
Q. シグナルハンドラ
Q. シグナルでやってはいけないこと
Q. シグナルハンドラ内でprintfを使ってはいけない理由はなぜか
Q. シグナルの例
Q. シグナル一覧
参考
シグナル (Unix) - Wikipedia
Signal (IPC) - Wikipedia
man signal (7): シグナルの概要
man signal (2): ANSI C シグナル操作
man sigaction (2): シグナルの動作の確認と変更
シグナルハンドラの処理について
signal-safety(7) - Linux manual page
DCL22-C. キャッシュできないデータには volatile を使う
シグナルハンドラにprintf()を書いてはいけない #Linux - Qiita
メモ
Cのプログラムでたまに出てくる関数内の無意味なvoid宣言の意味 - $ cat /var/log/shin
KMC Staff Blog:C++11以降の未使用の関数引数の書き方
【C言語】 未使用引数警告の消し方 (unused parameter) - C言語が好きかい?
Linux シグナルの基本と仕組み (カーネル v5.5 時点) #Linux - Qiita
SIG01-C. シグナルハンドラの継続性に関して処理系定義の詳細を理解する
SIG30-C. シグナルハンドラ内では非同期安全な関数のみを呼び出す
SIG34-C. 割り込み可能なシグナルハンドラ内から signal() を呼び出さない
The Linux Kernel: プロセス間通信の仕組み
その88 シグナル - YouTube
調査用
Google.icon シグナル(日)
Google.icon Signal(英)
Wikipedia.icon
シグナル - Wikipedia(日)
シグナル(検索) - Wikipedia(日)
Wikipedia.icon
Signal - Wikipedia(英)
Signal(検索) - Wikipedia(英)