Project

General

Profile

Actions

Bug #7798

closed

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

Added by clicube (cube cube) about 11 years ago. Updated about 11 years ago.

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

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);
}

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

Related issues 1 (0 open1 closed)

Is duplicate of Backport193 - Backport #7720: Process.daemon does not clean up background Ruby threads, leading to hang at exitRejectedusa (Usaku NAKAMURA)Actions

Updated by clicube (cube cube) about 11 years ago

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

Updated by znz (Kazuhiro NISHIYAMA) about 11 years ago

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

Updated by kosaki (Motohiro KOSAKI) about 11 years ago

  • Status changed from Open to Closed

Updated by kosaki (Motohiro KOSAKI) about 11 years ago

Closed because duplicated with #7720.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0