Bug #7798

子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない

Added by cube cube about 1 year ago. Updated about 1 year ago.

[ruby-dev:46938]
Status:Closed
Priority:Normal
Assignee:-
Category:-
Target version:1.9.3
ruby -v:ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux] Backport:

Description

■ 再現コード
Thread.new{ sleep }
Process.daemon

■ ruby -v の結果
ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]

■ 実際に起きた結果
プロセスが終了せずに残ります.
kill -TERM では終了できず, kill -KILL する必要があります.

■ 期待した結果
メインスレッドが終了し,プロセスが終了すると期待しました.

■ 解決方法
・rbffork() を参考に,下記のように2回目の rbfork() 後に rbthreadatfork() を実行するようにしたところ,期待した動作になりました.
 (期待した動作をしているように思いますが,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(EXITSUCCESS);
}
+ rbthreadatfork();

  if (!nochdir)
err = chdir("/");

Related issues

Duplicates Backport93 - Backport #7720: Process.daemon does not clean up background Ruby threads,... Assigned 01/22/2013

History

#1 Updated by cube cube about 1 year ago

タイトルを誤りました.
「子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない」
です.

#2 Updated by Kazuhiro NISHIYAMA about 1 year ago

  • Subject changed from 子スレッドを Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない to 子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない

#3 Updated by Motohiro KOSAKI about 1 year ago

  • Status changed from Open to Closed

#4 Updated by Motohiro KOSAKI about 1 year ago

Closed because duplicated with #7720.

Also available in: Atom PDF