Detach properly from calling process - fiche - A pastebin adjusted for gopher u… | |
git clone git://vernunftzentrum.de/fiche.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 1d247bf3df29866222634305bc66632101c05a36 | |
parent 80ee24683f7881c2e6dca88b4561f0c5ddd60b41 | |
Author: Christian Kellermann <[email protected]> | |
Date: Fri, 2 Mar 2018 20:55:05 +0100 | |
Detach properly from calling process | |
This will fork and create a new session ID. Together with the log file | |
patches this should make it a step closer to a proper daemon. | |
Diffstat: | |
fiche.c | 25 +++++++++++++++++++++++++ | |
1 file changed, 25 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/fiche.c b/fiche.c | |
@@ -281,6 +281,31 @@ int fiche_run(Fiche_Settings settings) { | |
return -1; | |
} | |
+ pid_t pid = fork(); | |
+ if (pid == -1){ | |
+ char *err = strerror(0); | |
+ print_error("Unable to fork into background: %s", err); | |
+ if (logfile_handle) fclose(logfile_handle); | |
+ return -1; | |
+ } | |
+ if (pid > 0){ | |
+ //parent | |
+ if (logfile_handle) fclose(logfile_handle); | |
+ return 0; | |
+ } | |
+ | |
+ if (setsid() == -1){ | |
+ char *err = strerror(0); | |
+ print_error("Creating new session id: %s", err); | |
+ if (logfile_handle) fclose(logfile_handle); | |
+ return -1; | |
+ } | |
+ | |
+ // We are detached so close those to avoid noise | |
+ fclose(stdin); | |
+ fclose(stdout); | |
+ fclose(stderr); | |
+ | |
// Main loop in this method | |
start_server(&settings); | |