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 | |
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.
-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("/"); |