第3回
シグナル処理の実験
- "Zzz."を出力して1秒間sleep()することを永遠に繰り返すコマンドcatchを作成する.catchはシグナルハンドラを登録していないので,"^C"で中断できることを確認する.
- SIGINTを補足すると,"^C"で中断できないことを確認する. コマンドを実行したままでは困るので,端末から"^Z"を入力しサスペンドにして, killコマンドを用いて中断すること.
- 別なシェルからkillコマンドでSIGINTを送ってみる.
発展1
SIG_IGNでSIGINTを無視してみる.
発展2
同様に,別なシェルからSIGKILLを送って中断を確認する.
発展3
SIGUSR1にもシグナルハンドラを登録して,別なシェルからシグナルを送信してみる.シグナルの種類は"kill -l"で表示できる.
発展4
SIGSEGVにもシグナルハンドラを登録して,意図的にsegmentation faultを起こしてみる.
発展5
sleep()をSIGALRMとpause()に置き換えること.
発展6
handler() 内の if 文の列を改良せよ.