まつもと ゆきひろです

In message "[ruby-list:9891] signal 関係"
    on 98/10/08, sat <sat / moon.letter.co.jp> writes:

|五樹島と申します。
|
|(1)
|
|perl では

 (略)

|などと記述することで、スクリプトに送られてきたsignalごとに分け
|て処理することが可能でしたが、rubyではどのように記述すればいい
|でしょうか。

  trap "SIGINT", "SIGHUP" do
    ...
  end

という書き方があります.

# SIGKILLは設定してもしょうがないと思いますが.

rubyのシグナルハンドラはperlより無茶ができます.なにをしても
まず落ちません.が,その代りCレベルで無限ループに落ちちゃう
とinterruptが効かないので,ご注意.SIGKILLは効きますが….

|(2)
|
|socket 通信などで、先方にコマンドを送ったとき、ある秒数だけ
|待って、その時間内に返事がくれば通常処理。その時間内に返事がこ
|なければタイムアウト処理をするという記述は、どうするのが適切で
|しょうか。

rubyではこういう時には普通はスレッドを使います.

  th = Thread.start{ ...}       # リクエストを送るスレッド
  sleep 3                       # 親スレッドは寝る
  if th.status                  # 子スレッドが生きていたら
     th.exit                    # 子スレッドの強制終了
     タイムアウト処理
  end

という感じですか.

西さん辺りに実際のコードを出して頂けると参考になると思うので
すが.lib/ping.rbには同様のやり方で終了処理としてスレッドに
例外を送り付けている例があります.

                                まつもと ゆきひろ /:|)