diff options
| author | vapier <vapier@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-06-07 21:48:30 +0000 |
|---|---|---|
| committer | vapier <vapier@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-06-07 21:48:30 +0000 |
| commit | a62731a42fd346e433cb4eaacaa9d0219792b1b6 (patch) | |
| tree | 845e3487ae54b0961985fb0f60f913faf7b5c9e9 | |
| parent | a1e790e72d03f38650f240c10d70eb82016870d1 (diff) | |
| download | busybox-w32-a62731a42fd346e433cb4eaacaa9d0219792b1b6.tar.gz busybox-w32-a62731a42fd346e433cb4eaacaa9d0219792b1b6.tar.bz2 busybox-w32-a62731a42fd346e433cb4eaacaa9d0219792b1b6.zip | |
sometimes daemonizing and vfork()/exit() is ok
git-svn-id: svn://busybox.net/trunk/busybox@15333 69ca8d6d-28ef-0310-b511-8ec308f3f277
| -rw-r--r-- | libbb/vfork_daemon_rexec.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 59a2287b0..05c9c0dab 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
| @@ -23,12 +23,9 @@ | |||
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | #ifdef BB_NOMMU | 25 | #ifdef BB_NOMMU |
| 26 | void vfork_daemon_rexec(int nochdir, int noclose, | 26 | static void vfork_daemon_common(int nochdir, int noclose) |
| 27 | int argc, char **argv, char *foreground_opt) | ||
| 28 | { | 27 | { |
| 29 | int fd; | 28 | int fd; |
| 30 | char **vfork_args; | ||
| 31 | int a = 0; | ||
| 32 | 29 | ||
| 33 | setsid(); | 30 | setsid(); |
| 34 | 31 | ||
| @@ -41,7 +38,24 @@ void vfork_daemon_rexec(int nochdir, int noclose, | |||
| 41 | dup2(fd, STDERR_FILENO); | 38 | dup2(fd, STDERR_FILENO); |
| 42 | if (fd > 2) | 39 | if (fd > 2) |
| 43 | close(fd); | 40 | close(fd); |
| 44 | } | 41 | } |
| 42 | } | ||
| 43 | |||
| 44 | void vfork_daemon(int nochdir, int noclose) | ||
| 45 | { | ||
| 46 | vfork_daemon_common(nochdir, noclose); | ||
| 47 | |||
| 48 | if (vfork()) | ||
| 49 | exit(0); | ||
| 50 | } | ||
| 51 | |||
| 52 | void vfork_daemon_rexec(int nochdir, int noclose, | ||
| 53 | int argc, char **argv, char *foreground_opt) | ||
| 54 | { | ||
| 55 | char **vfork_args; | ||
| 56 | int a = 0; | ||
| 57 | |||
| 58 | vfork_daemon_common(nochdir, noclose); | ||
| 45 | 59 | ||
| 46 | vfork_args = xcalloc(sizeof(char *), argc + 3); | 60 | vfork_args = xcalloc(sizeof(char *), argc + 3); |
| 47 | vfork_args[a++] = "/bin/busybox"; | 61 | vfork_args[a++] = "/bin/busybox"; |
