From: matz@... (Yukihiro Matsumoto) Date: 1999-10-09T19:11:30+09:00 Subject: [ruby-list:17572] Re: Exception.html & Errno.html for ruby-man-1.4.2-jp まつもと ゆきひろです In message "[ruby-list:17565] Re: Exception.html & Errno.html for ruby-man-1.4.2-jp" on 99/10/09, SHUDO Kazuyuki writes: |ちらっと ruby 1.4.2 のコードを見たところ、 |シグナルに関する OS ごとの挙動の違いを吸収し切れていないように見えます。 えーと、そうなんですか? | - シグナルハンドラ実行中、シグナルの発生がブロックされるか否か。 | (SA_NODEFER) | - シグナルハンドラが呼ばれる際、そのシグナルのハンドラが | SIG_DFL にリセットされるか否か。 | (SA_RESETHAND) | - シグナルハンドラによって中断されたシステムコールが再起動されるか否か。 | (SA_RESTART) | |これらのがどのように設定されるか、 |OS によってまちまちになってしまっていないでしょうか。 |POSIX な API (sigaction とか) を利用できない場合は仕方ないですが、 |struct sigaction のメンバ sa_flags をもう少しまめに設定した方が |ベターだと思います。 sa_flagsが0では不十分なんですね。具体的にはどんな値が良いの でしょうね。ちょっと調べたところ ocaml: sa_flags = 0; tcl: sa_flags = SA_RESTART python:使わず perl: SA_RESTART (SIGCHLD && SIG_IGN)の時は |= SA_NOCLDWAIT のようです。Perlの真似するかな。 | #if !defined(POSIX_SIGNAL) && !defined(BSD_SIGNAL) | ruby_signal(sig, sighandle); | #endif | |と、マクロ POSIX_SIGNAL が定義されている場合はシグナルハ |ンドラの再設定をしないようになっています。しかし、 |POSIX_SIGNAL は、関数 sigprocmask と sigaction が利用で |きる場合にセットされるものなので、このマクロを、 |再設定が要るか要らないかの判断に用いるのは適当ではないと思います。 了解しました。誤解していたようです。うーむ、シグナル難しい。 まつもと ゆきひろ /:|)