summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-25 09:21:49 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-25 09:21:49 +0000
commit9bb7a8ccddf15537da6af71e594322f2519350f7 (patch)
treeb3baff1e29bd6f902d015ba08e50e60fc6c2cccd /process.c
parent0dae2c910fa646a2b41d33f0b4d1dad818eb00da (diff)
* configure.in (ac_cv_func_daemon): use daemon(3) only on *BSD.
* process.c (proc_daemon): double fork to ensure not having ctty. [ruby-core:23311] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/process.c b/process.c
index 5669cf6641..4aeb615e73 100644
--- a/process.c
+++ b/process.c
@@ -4545,7 +4545,7 @@ proc_daemon(int argc, VALUE *argv)
#elif defined(HAVE_FORK)
switch (rb_fork(0, 0, 0, Qnil)) {
case -1:
- return (-1);
+ return INT2FIX(-1);
case 0:
break;
default:
@@ -4554,6 +4554,16 @@ proc_daemon(int argc, VALUE *argv)
proc_setsid();
+ /* must not be process-leader */
+ switch (rb_fork(0, 0, 0, Qnil)) {
+ case -1:
+ return INT2FIX(-1);
+ case 0:
+ break;
+ default:
+ _exit(0);
+ }
+
if (!RTEST(nochdir))
(void)chdir("/");