7 #include <boost/bind.hpp>
8 #include <boost/foreach.hpp>
9 #include <boost/range/adaptor/map.hpp>
19 const std::vector<SignalChildHandler> &sigchld_callbacks,
20 bool always_handle_sigchild) :
21 signal_(*(evm->io_service())),
22 sig_callback_map_(sig_callback_map),
23 sigchld_callbacks_(sigchld_callbacks),
24 always_handle_sigchild_(always_handle_sigchild) {
30 signal_(*(evm->io_service())),
31 sig_callback_map_(sig_callback_map),
33 always_handle_sigchild_(false) {
41 boost::system::error_code ec;
44 std::string sigstr(strsignal(sig));
45 LOG(ERROR, sigstr <<
" registration failed: " << ec);
56 std::vector<SignalHandler>(1, handler)));
58 std::vector<SignalHandler> &sig_handlers(it->second);
59 sig_handlers.push_back(handler);
64 int pid,
int status) {
66 sh(error, sig, pid, status);
76 const std::vector<SignalHandler> &callbacks(it->second);
83 return ::waitpid(pid, status, options);
100 boost::system::error_code ec;
113 boost::system::error_code ec;
void HandleSig(const boost::system::error_code &error, int sig)
void RegisterHandler(int sig, SignalHandler handler)
boost::system::error_code AddSignal(int sig)
std::vector< SignalChildHandler > sigchld_callbacks_
void NotifySig(const boost::system::error_code &error, int sig)
void RegisterSigHandler()
std::map< int, std::vector< SignalHandler > > SignalCallbackMap
boost::function< void(const boost::system::error_code &error, int sig)> SignalHandler
virtual int WaitPid(int pid, int *status, int options)
SignalCallbackMap sig_callback_map_
boost::asio::signal_set signal_
void NotifySigChld(const boost::system::error_code &error, int sig, int pid, int status)
#define LOG(_Level, _Msg)
boost::system::error_code InitializeSigChild()
boost::function< void(const boost::system::error_code &error, int sig, pid_t pid, int status)> SignalChildHandler
bool HandleSigOsSpecific(const boost::system::error_code &error, int sig)
Signal(EventManager *evm, const SignalCallbackMap &sig_callback_map, const std::vector< SignalChildHandler > &sigchld_callbacks, bool always_handle_sigchild)