iDetach properly from calling process - fiche - A pastebin adjusted for gopher use Err vernunftzentrum.de 70 hgit clone git://vernunftzentrum.de/fiche.git URL:git://vernunftzentrum.de/fiche.git vernunftzentrum.de 70 1Log /ckeen/repos/fiche/log.gph vernunftzentrum.de 70 1Files /ckeen/repos/fiche/files.gph vernunftzentrum.de 70 1Refs /ckeen/repos/fiche/refs.gph vernunftzentrum.de 70 1LICENSE /ckeen/repos/fiche/file/LICENSE.gph vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1commit 1d247bf3df29866222634305bc66632101c05a36 /ckeen/repos/fiche/commit/1d247bf3df29866222634305bc66632101c05a36.gph vernunftzentrum.de 70 1parent 80ee24683f7881c2e6dca88b4561f0c5ddd60b41 /ckeen/repos/fiche/commit/80ee24683f7881c2e6dca88b4561f0c5ddd60b41.gph vernunftzentrum.de 70 hAuthor: Christian Kellermann URL:mailto:ckeen@pestilenz.org vernunftzentrum.de 70 iDate: Fri, 2 Mar 2018 20:55:05 +0100 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDetach properly from calling process Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iThis will fork and create a new session ID. Together with the log file Err vernunftzentrum.de 70 ipatches this should make it a step closer to a proper daemon. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i fiche.c | 25 +++++++++++++++++++++++++ Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i1 file changed, 25 insertions(+), 0 deletions(-) Err vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1diff --git a/fiche.c b/fiche.c /ckeen/repos/fiche/file/fiche.c.gph vernunftzentrum.de 70 i@@ -281,6 +281,31 @@ int fiche_run(Fiche_Settings settings) { Err vernunftzentrum.de 70 i return -1; Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+ pid_t pid = fork(); Err vernunftzentrum.de 70 i+ if (pid == -1){ Err vernunftzentrum.de 70 i+ char *err = strerror(0); Err vernunftzentrum.de 70 i+ print_error("Unable to fork into background: %s", err); Err vernunftzentrum.de 70 i+ if (logfile_handle) fclose(logfile_handle); Err vernunftzentrum.de 70 i+ return -1; Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i+ if (pid > 0){ Err vernunftzentrum.de 70 i+ //parent Err vernunftzentrum.de 70 i+ if (logfile_handle) fclose(logfile_handle); Err vernunftzentrum.de 70 i+ return 0; Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+ if (setsid() == -1){ Err vernunftzentrum.de 70 i+ char *err = strerror(0); Err vernunftzentrum.de 70 i+ print_error("Creating new session id: %s", err); Err vernunftzentrum.de 70 i+ if (logfile_handle) fclose(logfile_handle); Err vernunftzentrum.de 70 i+ return -1; Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+ // We are detached so close those to avoid noise Err vernunftzentrum.de 70 i+ fclose(stdin); Err vernunftzentrum.de 70 i+ fclose(stdout); Err vernunftzentrum.de 70 i+ fclose(stderr); Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i // Main loop in this method Err vernunftzentrum.de 70 i start_server(&settings); Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 .