Actions
Bug #7798
closed子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
Description
■ 再現コード
Thread.new{ sleep }
Process.daemon
■ ruby -v の結果
ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]
■ 実際に起きた結果
プロセスが終了せずに残ります.
kill -TERM では終了できず, kill -KILL する必要があります.
■ 期待した結果
メインスレッドが終了し,プロセスが終了すると期待しました.
■ 解決方法
・rb_f_fork() を参考に,下記のように2回目の rb_fork() 後に rb_thread_atfork() を実行するようにしたところ,期待した動作になりました.
(期待した動作をしているように思いますが,1回目の rb_fork() の後にするべきなのか,両方でするべきなのかはわかりません.)
*** ruby-1.9.3-p385/process.c 2012-04-15 06:47:27.000000000 +0900
--- ruby-1.9.3-p385_/process.c 2013-02-07 21:21:12.000000000 +0900
*** 4928,4933 ****
--- 4928,4934 ----
default:
_exit(EXIT_SUCCESS);
}
-
err = chdir("/");rb_thread_atfork(); if (!nochdir)
Updated by clicube (cube cube) almost 12 years ago
タイトルを誤りました.
「子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない」
です.
Updated by znz (Kazuhiro NISHIYAMA) almost 12 years ago
- Subject changed from 子スレッドを Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない to 子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
Updated by kosaki (Motohiro KOSAKI) almost 12 years ago
- Status changed from Open to Closed
Updated by kosaki (Motohiro KOSAKI) almost 12 years ago
Closed because duplicated with #7720.
Actions
Like0
Like0Like0Like0Like0