[#23168] File.fnmatch のリファクタリング — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

13 messages 2004/03/08

[#23192] File.fnmatch と Dir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

19 messages 2004/03/13
[#23194] Re: File.fnmatch と Dir.glob の非互換部分 — matz@... (Yukihiro Matsumoto) 2004/03/13

まつもと ゆきひろです

[#23195] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/14

山本です。

[#23196] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/14

山本です。

[#23260] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/30

山本です。

[#23261] Re: File.fnmatch とDir.glob の非互換部分 — matz@... (Yukihiro Matsumoto) 2004/03/30

まつもと ゆきひろです

[#23265] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/30

山本です。

[#23238] Re: [ruby-cvs] ruby, ruby/lib, ruby/lib/rss, ruby/sample/openssl: * lib/logger.rb: trim tail space of each line. no user visible change. — Kouhei Sutou <kou@...>

須藤です.

10 messages 2004/03/27

[ruby-dev:23108] SIGHUP on Solaris

From: とみたまさひろ <tommy@...>
Date: 2004-03-02 12:19:14 UTC
List: ruby-dev #23108
とみたです。

Solaris 8 上の Ruby 1.8.1 で SIGHUP を処理して、かつ system() を使用す
ると、2回目の SIGHUP が捕捉できなくて落ちてしまいます。

# Ruby 1.6.8 でも同様です。

> ruby-1.8.1 -v -e 'trap("SIGHUP"){puts "HUP"}; system("true"); loop{sleep}' &
ruby 1.8.1 (2003-12-25) [sparc-solaris2.8]
[1] 18317
> kill -1 18317
HUP
> kill -1 18317
[1]    Hangup                        ruby-1.8.1 -v -e trap("SIGHUP"){puts "HUP"}; system("true"); loop{sleep}

system() や `〜` を使用しなければ問題ないようです。また、Linux では発
生しません。

「Solaris では signal() ではなく sigset() を使用すべき」という個人的な
経験則に基づいて、次のように変更したら正常動作しました。

# これが正しい対処かどうかはわかりません。

--- process.c.orig	2003-12-10 16:57:06.000000000 +0900
+++ process.c	2004-03-02 21:15:55.000000000 +0900
@@ -908,12 +908,12 @@
 
     if (!overriding) {
 #ifdef SIGHUP
-	hfunc = signal(SIGHUP, SIG_IGN);
+	hfunc = sigset(SIGHUP, SIG_IGN);
 #endif
 #ifdef SIGQUIT
-	qfunc = signal(SIGQUIT, SIG_IGN);
+	qfunc = sigset(SIGQUIT, SIG_IGN);
 #endif
-	ifunc = signal(SIGINT, SIG_IGN);
+	ifunc = sigset(SIGINT, SIG_IGN);
 	overriding = Qtrue;
 	hooked = Qtrue;
     }
@@ -924,12 +924,12 @@
 
     if (hooked) {
 #ifdef SIGHUP
-	signal(SIGHUP, hfunc);
+	sigset(SIGHUP, hfunc);
 #endif
 #ifdef SIGQUIT
-	signal(SIGQUIT, qfunc);
+	sigset(SIGQUIT, qfunc);
 #endif
-	signal(SIGINT, ifunc);
+	sigset(SIGINT, ifunc);
 	overriding = Qfalse;
     }
 }


-- 
とみたまさひろ <tommy@tmtm.org>

In This Thread

Prev Next