[#24028] --disable-shared --with-static-linked-ext problems — IWATSUKI Hiroyuki <don@...>
岩月と申します。
4 messages
2004/08/06
[#24030] Process.daemon — Tanaka Akira <akr@...17n.org>
Matz 日記にちょっと書いてありますが、Process.daemon というメソッドを提
10 messages
2004/08/07
[#24033] Re: Process.daemon
— Hidetoshi NAGAI <nagai@...>
2004/08/09
永井@知能.九工大です.
[#24038] Re: Process.daemon
— matz@... (Yukihiro Matsumoto)
2004/08/09
まつもと ゆきひろです
[#24032] RDtool標準添付希望 — Minero Aoki <aamine@...>
青木です。
11 messages
2004/08/08
[#24051] k*bsd*-gnu — akira yamada / やまだあきら <akira@...>
configure.inにGNU/k*BSDのサポートを加えてほしいというリクエストを受けました:
7 messages
2004/08/10
[#24060] Zlib::GzipReader#ungetc causes crc error — Tanaka Akira <akr@...17n.org>
次のように、Zlib::GzipReader#ungetc を使うと crc error が起こることがあります。
5 messages
2004/08/11
[#24072] SSLSocket#wait — GOTOU Yuuzou <gotoyuzo@...>
ごとうゆうぞうです。
9 messages
2004/08/13
[#24076] Re: SSLSocket#wait
— Tanaka Akira <akr@...17n.org>
2004/08/14
In article <20040814.051615.28808521.gotoyuzo@sawara.does.notwork.org>,
[#24081] to compile tcltklib (bcc32) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
11 messages
2004/08/15
[#24082] Re: to compile tcltklib (bcc32)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/16
山本です。
[#24083] Re: to compile tcltklib (bcc32)
— "U.Nakamura" <usa@...>
2004/08/16
こんにちは、なかむら(う)です。
[#24084] Re: to compile tcltklib (bcc32)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/16
山本です。
[#24085] Re: to compile tcltklib (bcc32)
— WATANABE Hirofumi <eban@...>
2004/08/16
わたなべです。
[#24088] duplex I/O for tty — Tanaka Akira <akr@...17n.org>
見つけてしまったので一応報告するのですが、次のように tty と双方向にや
7 messages
2004/08/16
[#24089] Re: duplex I/O for tty
— とみたまさひろ <tommy@...>
2004/08/16
とみたです。
[#24095] Re: duplex I/O for tty
— Tanaka Akira <akr@...17n.org>
2004/08/17
In article <20040816190928.524389c9.tommy@tmtm.org>,
[#24103] core dump with binding, eval, instance_eval and class variable — Tanaka Akira <akr@...17n.org>
次のように、binding, eval, instance_eval, class 変数を使うと、core を
9 messages
2004/08/17
[#24105] Re: core dump with binding, eval, instance_eval and class variable
— nobu@...
2004/08/18
なかだです。
[#24110] Re: core dump with binding, eval, instance_eval and class variable
— Tanaka Akira <akr@...17n.org>
2004/08/18
In article <200408180201.i7I21pgh027007@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#24116] Re: core dump with binding, eval, instance_eval and class variable
— nobu@...
2004/08/18
なかだです。
[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。原因を追求してたのですが、力尽きました。
19 messages
2004/08/18
[#24127] Re: ruby/tk crashes on bcc32
— Hidetoshi NAGAI <nagai@...>
2004/08/19
永井@知能.九工大です.
[#24131] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/19
山本です。
[#24135] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/19
山本です。試行錯誤の結果、これで落ちなくなりました。
[#24138] Re: ruby/tk crashes on bcc32
— nobu@...
2004/08/20
なかだです。
[#24139] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/20
山本です。
[#24149] Re: ruby/tk crashes on bcc32
— nobu@...
2004/08/20
なかだです。
[#24150] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/21
山本です。
[#24151] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/21
山本です。
[#24152] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/21
山本です。
[#24175] Re: ruby/tk crashes on bcc32
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/08/25
山本です。
[#24176] Re: ruby/tk crashes on bcc32
— 小西 弘将 <konishih@...6.so-net.ne.jp>
2004/08/25
小西です。
[#24140] CGI::Session has security problem? — Takahiro Kambe <taca@...>
こんにちは。
6 messages
2004/08/20
[#24142] Re: CGI::Session has security problem?
— matz@... (Yukihiro Matsumoto)
2004/08/20
[#24143] ヒアドキュメント形式の外部コマンド実行時の不具合(mswin版)? — OKADOME Junichi <tome@...>
まつもとさん、みなさん、はじめまして。
6 messages
2004/08/20
[#24156] CGI::Session::FileStore should not use Dir::tmpdir — Shugo Maeda <shugo@...>
前田です。
11 messages
2004/08/24
[#24157] Re: CGI::Session::FileStore should not use Dir::tmpdir
— Shugo Maeda <shugo@...>
2004/08/24
前田です。
[#24160] Re: CGI::Session::FileStore should not use Dir::tmpdir
— matz@... (Yukihiro Matsumoto)
2004/08/24
まつもと ゆきひろです
[#24163] Re: CGI::Session::FileStore should not use Dir::tmpdir
— Shugo Maeda <shugo@...>
2004/08/24
前田です。
[#24164] Re: CGI::Session::FileStore should not use Dir::tmpdir
— matz@... (Yukihiro Matsumoto)
2004/08/24
まつもと ゆきひろです
[ruby-dev:24030] Process.daemon
From:
Tanaka Akira <akr@...17n.org>
Date:
2004-08-07 16:00:30 UTC
List:
ruby-dev #24030
Matz 日記にちょっと書いてありますが、Process.daemon というメソッドを提
案します。
4.4BSD (または glibc) をあるていど知っている人は名前から想像できると思
うのですが、daemon(3) を呼んで(またはそれと等価なことをして)、プロセス
をデーモン化するメソッドです。
これは以前にも何回か議論にのぼって Ruby で実現可能であるとして立ち消え
になっているのですが ([ruby-talk:87459], [ruby-dev:22938])、あえてまた
提案するのは、Ruby で実装するとデーモン化を行なった以外のスレッドがす
べて死ぬのに対し、C で実装すればスレッドを生きたままデーモン化できるか
らです。これが可能なのは、デーモン化においては fork 直後に親が死ぬため、
親に残ったスレッドは存在しないものとできて、子供 (というか孫) のプロセ
スにスレッドを残しても競合が起こらないからです。
fork において子プロセスのスレッドが死ぬ挙動は 1.8 における fork の仕様
が原因ですが、fork でスレッドが死んで困ったという例を調べると、理由が
わかるもののはほとんどが (私の知る限りひとつの例外を除いて) デーモン化
するために fork したときに死んで困ったという話です。([ruby-dev:11680]
の rwiki, [ruby-bugs-ja:576] の QuickML, http://eto.com/d/0407.html)
# 私が知っているただひとつの例外はなひさんのデバッガです。
というわけで、デーモン化するメソッドを C で書いて新設すれば、fork の仕
様の変化で困る状況のかなりの部分を救済できるのではないかと思います。
また、fork/setsid とか難しいこと (古い Unix も考えるなら、BSD と SysV
での制御端末の切り離しかたとかなどの微妙な話) を知らなくてもデーモン化で
きるようになるという利点もあります。つまり、4.4BSD/glibc で C で書くの
と同じくらいデーモン化が簡単になるといえるわけで、そもそも現在の、C よ
りも Ruby で書くほうがデーモン化が難しいというのは変ではないでしょうか?
具体的な仕様は daemon(3) に似せておけばよかろうというわけで、試しに次
のような実装を行なってみました。実際には daemon(3) が無い場合には
fork/setsid などで行なう実装も加えるべきですが、それはやっていません。
どんなもんでしょう?
Index: configure.in
===================================================================
RCS file: /src/ruby/configure.in,v
retrieving revision 1.241
diff -u -p -r1.241 configure.in
--- configure.in 8 Jul 2004 10:27:23 -0000 1.241
+++ configure.in 7 Aug 2004 15:09:51 -0000
@@ -418,7 +418,7 @@ AC_CHECK_FUNCS(fmod killpg wait4 waitpid
getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
getpriority getrlimit dlopen sigprocmask sigaction _setjmp\
setsid telldir seekdir fchmod mktime timegm cosh sinh tanh\
- setuid setgid)
+ setuid setgid daemon)
AC_ARG_ENABLE(setreuid,
[ --enable-setreuid use setreuid()/setregid() according to need even if obsolete.],
[use_setreuid=$enableval])
Index: process.c
===================================================================
RCS file: /src/ruby/process.c,v
retrieving revision 1.108
diff -u -p -r1.108 process.c
--- process.c 17 Jul 2004 06:28:10 -0000 1.108
+++ process.c 7 Aug 2004 15:10:09 -0000
@@ -1834,6 +1834,35 @@ proc_setsid()
#endif
}
+/*
+ * call-seq:
+ * Process.daemon([nochdir], [noclose]) => nil
+ *
+ * Make the process as a daemon.
+ *
+ * Process.daemon doesn't kill other threads unlike Process.fork.
+ *
+ */
+
+static VALUE
+proc_daemon(argc, argv)
+ int argc;
+ VALUE *argv;
+{
+#if defined(HAVE_DAEMON)
+ VALUE nochdir, noclose;
+
+ rb_scan_args(argc, argv, "02", &nochdir, &noclose);
+
+ if (daemon(RTEST(nochdir), RTEST(noclose)) < 0) {
+ rb_sys_fail("daemon");
+ }
+#else
+ rb_notimplement();
+#endif
+ return Qnil;
+}
+
/*
* call-seq:
@@ -3519,6 +3548,7 @@ Init_process()
rb_define_module_function(rb_mProcess, "setpgid", proc_setpgid, 2);
rb_define_module_function(rb_mProcess, "setsid", proc_setsid, 0);
+ rb_define_module_function(rb_mProcess, "daemon", proc_daemon, -1);
rb_define_module_function(rb_mProcess, "getpriority", proc_getpriority, 2);
rb_define_module_function(rb_mProcess, "setpriority", proc_setpriority, 3);
なお、Matz 日記には /dev/null (の存在?) への懸念が書いてありますが、
daemon を呼び出す限りはその問題に対する責任は libc にあるといえるので
はないかと思います。というか、glibc の daemon の実装でも、/dev/null の
存在は仮定しているような記述がマニュアルにありますし、それは悩んでもう
まい解は存在しない類の懸念なのではないかと思います。
--
[田中 哲][たなか あきら][Tanaka Akira]