Forum: Ruby-dev [ruby-trunk - Bug #7798][Open] 子スレッドを Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない

Posted by clicube (Cubing Cube) (Guest)
on 2013-02-07 14:35
(Received via mailing list)
Issue #7798 has been reported by clicube (Cubing Cube).

----------------------------------------
Bug #7798: 子スレッドを Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
https://bugs.ruby-lang.org/issues/7798

Author: clicube (Cubing Cube)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]


■ 再現コード
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("/");
Posted by clicube (Cubing Cube) (Guest)
on 2013-02-07 14:37
(Received via mailing list)
Issue #7798 has been updated by clicube (Cubing Cube).


タイトルを誤りました.
「子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない」
です.
----------------------------------------
Bug #7798: 子スレッドを Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
https://bugs.ruby-lang.org/issues/7798#change-35983

Author: clicube (Cubing Cube)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]


■ 再現コード
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("/");
Posted by znz (Kazuhiro NISHIYAMA) (Guest)
on 2013-02-07 15:37
(Received via mailing list)
Issue #7798 has been updated by znz (Kazuhiro NISHIYAMA).

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


----------------------------------------
Bug #7798: 子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
https://bugs.ruby-lang.org/issues/7798#change-35991

Author: clicube (Cubing Cube)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]


■ 再現コード
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("/");
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2013-02-08 05:09
(Received via mailing list)
Issue #7798 has been updated by kosaki (Motohiro KOSAKI).

Status changed from Open to Closed


----------------------------------------
Bug #7798: 子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
https://bugs.ruby-lang.org/issues/7798#change-36032

Author: clicube (Cubing Cube)
Status: Closed
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]


■ 再現コード
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("/");
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2013-02-08 05:48
(Received via mailing list)
Issue #7798 has been updated by kosaki (Motohiro KOSAKI).


Closed because duplicated with #7720.
----------------------------------------
Bug #7798: 子スレッドを実行しているとき Process.daemon すると,その後メインスレッドが終了してもプロセスが終了しない
https://bugs.ruby-lang.org/issues/7798#change-36037

Author: clicube (Cubing Cube)
Status: Closed
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p385 (2013-02-06 revision 39114) [i686-linux]


■ 再現コード
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("/");
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.