Commit | Line | Data |
---|---|---|
2e5c011b MT |
1 | /*- |
2 | * Copyright (c) 1990 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * %sccs.include.redist.c% | |
6 | */ | |
7 | ||
8 | #if defined(LIBC_SCCS) && !defined(lint) | |
c21ffddf | 9 | static char sccsid[] = "@(#)daemon.c 5.3 (Berkeley) %G%"; |
2e5c011b MT |
10 | #endif /* LIBC_SCCS and not lint */ |
11 | ||
c21ffddf KB |
12 | #include <sys/fcntl.h> |
13 | #include <unistd.h> | |
14 | #include <paths.h> | |
2e5c011b | 15 | |
b662bbb5 MT |
16 | daemon(nochdir, noclose) |
17 | int nochdir, noclose; | |
2e5c011b MT |
18 | { |
19 | int cpid; | |
20 | ||
21 | if ((cpid = fork()) == -1) | |
22 | return (-1); | |
23 | if (cpid) | |
24 | exit(0); | |
2e5c011b | 25 | (void) setsid(); |
b662bbb5 MT |
26 | if (!nochdir) |
27 | (void) chdir("/"); | |
28 | if (!noclose) { | |
c21ffddf | 29 | int devnull = open(_PATH_DEVNULL, O_RDWR, 0); |
b662bbb5 MT |
30 | |
31 | if (devnull != -1) { | |
c21ffddf KB |
32 | (void) dup2(devnull, STDIN_FILENO); |
33 | (void) dup2(devnull, STDOUT_FILENO); | |
34 | (void) dup2(devnull, STDERR_FILENO); | |
b662bbb5 MT |
35 | if (devnull > 2) |
36 | (void) close(devnull); | |
37 | } | |
38 | } | |
2e5c011b | 39 | } |