SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

signalについて

signalについて(後篇)

シグナル使用上の注意点と改良ポイント


7. その他の話題

 他の言語でのシグナルを見てみます。

 と言っても、私はC/C++くらいしか扱った事がないのですが、例えば、Javaではシグナルハンドラの実装が可能なのでしょうか? ここでは、bashによるシグナルの扱いについて述べます。

 bashでシグナルを捕捉するには、trapコマンドを使用します。ここでは「signal_test_handler.c」の模倣をしてみます。

signal_test_trap.sh
#!/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を発行されると無視されますが、まあこれは当然と言えるでしょう。

signal_test_trap_0.sh
#!/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

次のページ
8. 将来

この記事は参考になりましたか?

signalについて連載記事一覧

もっと読む

この記事の著者

赤松 エイト(エイト)

(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1591 2008/08/20 15:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー