シグナルハンドラをセットして、指定のシグナルが来たら、独自処理を行うようにしてみる。
ハンドラ関数名はなんでもいいが、今回は便宜的にhandlerにする。
handlerの引数には、受け取ったシグナルのシグナル定数が渡される。
このような感じで、handlerを渡す。
今回もCtrl+CでSIGINTを送るので、SIGINTの値がsigに渡されるので、それをprintfで出力する。
$ vi handler.c $ gcc handler.c -o handler $ ./handler process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) ^Csig = 2 process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) ^Csig = 2 process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) ^Csig = 2 process running...(signal(SIGINT, handler)) process running...(signal(SIGINT, handler)) $
Man page of SIGNAL
ここにはSIGINTは2とあるので、確かにSIGINTが来ている。
Sample/unixsyscall/handler/handler/src/handler at master · bg1bgst333/Sample · GitHub