[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 <----

In This Thread

Prev Next