From: matz@... (Yukihiro Matsumoto) Date: 1998-10-09T10:33:04+09:00 Subject: [ruby-list:9903] Re: signal 関係 まつもと ゆきひろです In message "[ruby-list:9891] signal 関係" on 98/10/08, sat 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には同様のやり方で終了処理としてスレッドに 例外を送り付けている例があります. まつもと ゆきひろ /:|)