SNode.C
Loading...
Searching...
No Matches
Daemon.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef UTILS_DAEMON_H
21#define UTILS_DAEMON_H
22
23#ifndef DOXYGEN_SHOULD_SKIP_THIS
24
25#include "core/system/unistd.h"
26
27#include <stdexcept>
28#include <string>
29
30#endif // DOXYGEN_SHOULD_SKIP_THIS
31
32namespace utils {
33 class DaemonFailure : public std::runtime_error {
34 public:
35 explicit DaemonFailure(const std::string& failureMessage);
36
37 ~DaemonFailure() override;
38 };
39
40 class DaemonError : public DaemonFailure {
41 public:
42 explicit DaemonError(const std::string& errorMessage);
43
44 ~DaemonError() override;
45 };
46
47 class DaemonSignaled : public std::runtime_error {
48 public:
49 explicit DaemonSignaled(const std::string& message, pid_t pid);
50
51 ~DaemonSignaled() override;
52
53 pid_t getPid() const;
54
55 private:
56 pid_t pid = 0;
57 };
58
59 class Daemon {
60 public:
61 Daemon() = delete;
62 ~Daemon() = delete;
63
64 static void startDaemon(const std::string& pidFileName, const std::string& userName, const std::string& groupName);
65 static pid_t stopDaemon(const std::string& pidFileName);
66
67 static void erasePidFile(const std::string& pidFileName);
68 };
69
70} // namespace utils
71
72#endif // UTILS_DAEMON_H
#define XSTR(s)
CLI::App * getApp() const
CallForShowConfig(CLI::App *app)
static void init()
Definition Logger.cpp:32
static void setQuiet(bool quiet=true)
Definition Logger.cpp:114
static bool parse1()
Definition Config.cpp:373
static char ** argv
Definition Config.h:107
static CLI::Option * logLevelOpt
Definition Config.h:120
static std::map< std::string, CLI::Option * > applicationOptions
Definition Config.h:125
static int getVerboseLevel()
Definition Config.cpp:947
static bool parse2()
Definition Config.cpp:532
static std::string configDirectory
Definition Config.h:111
static std::shared_ptr< CLI::App > app
Definition Config.h:103
static CLI::Option * groupNameOpt
Definition Config.h:118
static CLI::Option * verboseLevelOpt
Definition Config.h:121
static CLI::Option * quietOpt
Definition Config.h:122
static bool init(int argc, char *argv[])
Definition Config.cpp:106
static int argc
Definition Config.h:106
static std::string pidDirectory
Definition Config.h:113
static std::shared_ptr< CLI::Formatter > sectionFormatter
Definition Config.h:104
static std::map< std::string, std::string > aliases
Definition Config.h:124
static void required(CLI::App *instance, bool reqired=true)
Definition Config.cpp:804
static CLI::Option * logFileOpt
Definition Config.h:116
static CLI::Option * enforceLogFileOpt
Definition Config.h:119
static bool bootstrap()
Definition Config.cpp:343
static int getLogLevel()
Definition Config.cpp:943
static std::string applicationName
Definition Config.h:109
static std::string logDirectory
Definition Config.h:112
static void terminate()
Definition Config.cpp:614
static CLI::Option * userNameOpt
Definition Config.h:117
static CLI::Option * daemonizeOpt
Definition Config.h:115
#define STR(a)
Definition clients.h:26
Definition Config.h:37
static const std::shared_ptr< CLI::App > makeApp()
Definition Config.cpp:71
static std::string createCommandLineTemplate(CLI::App *app, CLI::CallForCommandline::Mode mode)
Definition Config.cpp:512
static const std::shared_ptr< CLI::HelpFormatter > makeSectionFormatter()
Definition Config.cpp:633
static void createCommandLineTemplate(std::stringstream &out, CLI::App *app, CLI::CallForCommandline::Mode mode)
Definition Config.cpp:497
static void createCommandLineOptions(std::stringstream &out, CLI::App *app, CLI::CallForCommandline::Mode mode)
Definition Config.cpp:409
static std::string createCommandLineOptions(CLI::App *app, CLI::CallForCommandline::Mode mode)
Definition Config.cpp:467
static std::string createCommandLineSubcommands(CLI::App *app, CLI::CallForCommandline::Mode mode)
Definition Config.cpp:482