IRIX 6.3 上の ruby 1.3.3 で拡張ライブラリを書いています.

拡張ライブラリで定義したメソッドで, 処理に時間のかかるものが
あって, 実行中に ^C あるいは Delete が押されたら中断するよう
にしたいのですが, どうしたらよいでしょうか.

関数 rb_rescue を使ってみたのですが, 端末から割り込みをかけ
ても, 例外が発生したときに呼ばれると思った関数は呼ばれず, 何
事もなかったかのように処理が続けられます.

次のようなソースファイルで試しました. メソッド test の実行中
に割り込みをかけても関数 test_rescue は呼ばれないようです.
------------------------------------------------------------
#include "ruby.h"
#include <unistd.h>

static VALUE mTest01 ;

static VALUE test_proc(VALUE arg)
{
    int i ;
    for(i = 0 ; i < 10 ; i++)
    {
        fprintf(stderr, "@") ;
        sleep(1) ;
    }
    return Qnil ;
}

static VALUE test_rescue(VALUE arg)
{
    fprintf(stderr, "Ouch!\n") ;
    return Qnil ;
}

static VALUE test(VALUE obj)
{
    return rb_rescue(
        (VALUE (*)())test_proc, Qnil, (VALUE (*)())test_rescue, Qnil) ;
}

void Init_test01()
{
    mTest01 = rb_define_module("Test01");
    rb_define_method(mTest01, "test", (VALUE(*)())test, 0);
}
------------------------------------------------------------

                     ちば けいすけ <chiba / lab.imagica.co.jp>