7 #include <boost/bind/bind.hpp>
8 #include <boost/foreach.hpp>
9 #include <boost/range/adaptor/map.hpp>
15 using namespace boost::placeholders;
21 const std::vector<SignalChildHandler> &sigchld_callbacks,
22 bool always_handle_sigchild) :
23 signal_(*(
evm->io_service())),
24 sig_callback_map_(sig_callback_map),
25 sigchld_callbacks_(sigchld_callbacks),
26 always_handle_sigchild_(always_handle_sigchild) {
32 signal_(*(
evm->io_service())),
33 sig_callback_map_(sig_callback_map),
35 always_handle_sigchild_(false) {
43 boost::system::error_code ec;
46 std::string sigstr(strsignal(sig));
47 LOG(ERROR, sigstr <<
" registration failed: " << ec);
58 std::vector<SignalHandler>(1, handler)));
60 std::vector<SignalHandler> &sig_handlers(it->second);
61 sig_handlers.push_back(handler);
66 int pid,
int status) {
68 sh(error, sig, pid, status);
78 const std::vector<SignalHandler> &callbacks(it->second);
85 return ::waitpid(pid, status,
options);
102 boost::system::error_code ec;
115 boost::system::error_code ec;
virtual int WaitPid(int pid, int *status, int options)
boost::system::error_code InitializeSigChild()
SignalCallbackMap sig_callback_map_
boost::function< void(const boost::system::error_code &error, int sig, pid_t pid, int status)> SignalChildHandler
void RegisterHandler(int sig, SignalHandler handler)
std::map< int, std::vector< SignalHandler > > SignalCallbackMap
std::vector< SignalChildHandler > sigchld_callbacks_
boost::function< void(const boost::system::error_code &error, int sig)> SignalHandler
void RegisterSigHandler()
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)
void HandleSig(const boost::system::error_code &error, int sig)
boost::asio::signal_set signal_
boost::system::error_code AddSignal(int sig)
void NotifySigChld(const boost::system::error_code &error, int sig, int pid, int status)
void NotifySig(const boost::system::error_code &error, int sig)
#define LOG(_Level, _Msg)