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
この記事は参考になりましたか?
- signalについて連載記事一覧
-
- signalについて(後篇)
- signalについて(中篇)
- signalについて(前篇)
- この記事の著者
-
赤松 エイト(エイト)
(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
