diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-09-19 00:46:52 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-09-19 15:34:16 +0900 |
commit | ae07336529ee0955bb08b12eb69a90aa9ab4b9f9 (patch) | |
tree | 2f3ef64af9b1872272239371fd2d7df5f7b8629f /process.c | |
parent | 1c9381283e68b9021df2509fb64d663998d8cb5a (diff) | |
download | ruby-ae07336529ee0955bb08b12eb69a90aa9ab4b9f9.tar.gz |
Reduce fork calls in daemon
The forked child process is a grandchild process from the viewpoint of
the process which invoked the caller process. That means the child is
detached at that point, and it does not need to fork twice.
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 14 |
1 files changed, 4 insertions, 10 deletions
@@ -7109,20 +7109,14 @@ rb_daemon(int nochdir, int noclose) #else int n; -#define fork_daemon() \ - switch (rb_fork_ruby(NULL)) { \ - case -1: return -1; \ - case 0: break; \ - default: _exit(EXIT_SUCCESS); \ + switch (rb_fork_ruby(NULL)) { + case -1: return -1; + case 0: break; + default: _exit(EXIT_SUCCESS); } - fork_daemon(); - if (setsid() < 0) return -1; - /* must not be process-leader */ - fork_daemon(); - if (!nochdir) err = chdir("/"); |