[#380] bug report#3 and request#5 — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
1 message
1996/08/06
[ruby-list:403] Re: help: trap
From:
Date:
1996-08-12 08:11:36 UTC
List:
ruby-list #403
けいじゅ@SHLジャパンです.
In [ruby-list :00401 ] the message: "[ruby-list:401] Re: help: trap ",
on Aug/12 16:41(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes:
>ええと,trapはsignalをハンドルするものです.shのtrapやperlの
>@INTをイメージしてください.SIGINTのデフォルトのシグナルハン
>ドラは例外を発生させるようになっています.ですから,
なるほど, シグナルハンドラが例外を発生させるようになっていたのですね.
>|trap("SIGINT") {
>| exit
>|}
>
>というはプログラムにSIGINTを送ると例外を発生させないで(シグ
>ナルハンドラをオーバライドしているので),exitします.例外は
>シグナルではないので,trapのハンドラは実行されません.
聞きたかったのはそういうことではなくて,
例えば:
%ruby
trap("SIGINT") {
print 1
exit
}
sleep 1000
print 2
とし, これを実行し ^C すると,
12
が表示されます. これって 変な動作じゃないですか? と聞きたかったのです
が??
>|あと, trapのブロックの中に return を書くと コンパイルエラーになります.
>|3. trapのブロック中では, return できないものなのか?
>トラップはシグナルが発生した時にtrapされるものです.これはトッ
>プレベルで実行されるのと同じですからreturnできません(戻り先
>が無い).
なるほど.
>シグナルハンドラの途中で実行を終了させたい時にはbreakを使っ
>てください(ちょっと変な気もするが).
つまり, ブロックを修了するか break すると 再実行するということですね.
>|4. 先のメイルにも書きましたが, trapと例外の関連がイマイチ掴み切れてい
>| ません. どのようになっているのでしょうか?
>先程述べたようにSIGINTのデフォルトのハンドラが例外を発生させ
>るという以外に関係は無いです.
わかりました.
__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----