【发布时间】:2015-04-29 18:32:44
【问题描述】:
我有一个自定义信号,它通过以下方式从内核模块发送到用户空间。请注意,我在附加到信号的 si_int 结构参数中包含一个整数 (id),并且我已经知道我所针对的用户空间应用程序的 pid。
struct siginfo info;
memset(&info, 0, sizeof(struct siginfo));
info.si_signo = MY_CUSTOM_SIGNAL;
info.si_code = SI_QUEUE; // Fake coming from user-space
info.si_int = id; // Include some variable id
send_sig_info(MY_CUSTOM_SIGNAL, &info, pid);
在我的用户空间应用程序中,我通过以下方式监听信号:
boost::asio::io_service io;
boost::asio::signal_set signals(io, MY_CUSTOM_SIGNAL);
signals.async_wait(handler);
io.run();
...当它发生时调用这个处理程序...
void handler(const boost::system::error_code& error, int signal_number)
{
// Do something with the signal
}
不幸的是,siginfo 没有传递到处理程序中,所以我无法确定内核模块分配的id 变量的值。有什么方法可以确定这个值吗?
【问题讨论】:
标签: c++ linux boost-asio