7. その他の話題
他の言語でのシグナルを見てみます。
と言っても、私はC/C++くらいしか扱った事がないのですが、例えば、Javaではシグナルハンドラの実装が可能なのでしょうか? ここでは、bashによるシグナルの扱いについて述べます。
bashでシグナルを捕捉するには、trapコマンドを使用します。ここでは「signal_test_handler.c」の模倣をしてみます。
#!/bin/sh
function handler {
echo "signal get"
sleep 2
echo "signal end"
}
trap "handler" INT HUP
while true
do
read buf
echo "status = $? : $buf"
done
上記プログラムで分かるとおり、trapを使うことで実現可能です。trapの後ろに起動コマンドおよび捕捉関数を設定し、その後ろにシグナル名を記載します。
さらにシグナルには「0」があります。つまり「exit 0」を実行すると登録されたコマンドおよび捕捉関数を動かす事ができます。ただし、SIGKILLを発行されると無視されますが、まあこれは当然と言えるでしょう。
#!/bin/sh
function handler {
echo "signal get"
sleep 2
echo "signal end"
}
trap "handler" INT HUP 0
while true
do
read buf
echo "status = $? : $buf"
if [ "$buf" = "end" ]; then
exit 0
fi
done
