1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
3 #include "cli/internalsignalcommand.hpp"
4 #include "base/logger.hpp"
7 using namespace icinga;
8 namespace po = boost::program_options;
10 REGISTER_CLICOMMAND("internal/signal", InternalSignalCommand);
12 String InternalSignalCommand::GetDescription() const
14 return "Send signal as Icinga user";
17 String InternalSignalCommand::GetShortDescription() const
19 return "Send signal as Icinga user";
22 ImpersonationLevel InternalSignalCommand::GetImpersonationLevel() const
24 return ImpersonateIcinga;
27 bool InternalSignalCommand::IsHidden() const
32 void InternalSignalCommand::InitParameters(boost::program_options::options_description& visibleDesc,
33 boost::program_options::options_description& hiddenDesc) const
35 visibleDesc.add_options()
36 ("pid,p", po::value<int>(), "Target PID")
37 ("sig,s", po::value<String>(), "Signal (POSIX string) to send")
42 * The entry point for the "internal signal" CLI command.
44 * @returns An exit status.
46 int InternalSignalCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
49 String signal = vm["sig"].as<String>();
52 if (signal == "SIGKILL")
53 return kill(vm["pid"].as<int>(), SIGKILL);
54 if (signal == "SIGINT")
55 return kill(vm["pid"].as<int>(), SIGINT);
56 if (signal == "SIGCHLD")
57 return kill(vm["pid"].as<int>(), SIGCHLD);
58 if (signal == "SIGHUP")
59 return kill(vm["pid"].as<int>(), SIGHUP);
61 Log(LogCritical, "cli") << "Unsupported signal \"" << signal << "\"";
63 Log(LogCritical, "cli", "Unsupported action on Windows.");