conundrumです。様は勘弁... :-)

yahataさんのおっしゃること、半分は、間違いではないと思いいます。

> >  私も begin - ensure - end を使ったのですが、強制終了した場合には、
> > EXCEL.exeが残ってしまいます。結局は、プログラムで終了しなければならない
よ
>
> > です。本来は、不用意に終了した場合に、実行すると理解していましたが、必ず
し
> > も真でないと思いました。間違いでしょうか。

上記文面における「不用意に終了」ってのが、くせ者ですね。

begin - ensure - end の endure は、

    Rubyインタプリタはまだ生きていて、
    begin 〜 ensure の間で誰かが例外を throw してきたら、
    Rubyインタプリタが
    『やれやれ、困ったさんだな〜 後片付けはやっといたけるね』

というケースで有効なものだと、わたしは考えています。

で、

>このことを確認するスクリプトを作成しました。実行中に強制終了した場合に、
>begin - ensure - end を利用しても、EXCEL.exeが残ることは確認しました。これ
に
>は、はっきりした理由があると思いますが、如何でしょうか。

これはですね、わたしが誤認していなければ、

    Rubyインタプリタ自体が、begin 〜 ensure の間で、
    お亡くなりになってる。
    南無三。

だと。
こうなってしまっては、手も足も出せるはずがなく、ensure は実行されるわけもな
く、
EXCEL.exe は取り残される、と。

最初に「半分」と書いたのは、「不用意に終了」が、上記の両方を含意しているよう
に
思えたからです。

たとえば、同じようなことをJavaで書いたとしましょうか。
その場合でも、try 〜 finally の間に、何らかの理由で JVM がお亡くなりになった
ら、
finally は実行されませんよね。

う〜、これ以上書くと馬脚を現しそうなので、やめとこう。

anyway, 例外(Exception) と Rubyインタプリタの停止 は区別すべきか、と。

[ハズしていませんように](祈)

_________________________________________________________________
MSN Hotmail が贈る Hot Xmas × VOGUE 
http://promotion.msn.co.jp/hotmail/xmas/index.html 素敵なクリスマスコフレを
プレゼント