我在代码中放置了一个简单的信号处理程序。我已经初始化sigevent结构,并使用处理函数来捕捉信号。UNIX/Linux信号处理:SIGEV_THREAD
有人可以请指出为什么代码不工作?理想情况下,如果有信号,我的处理程序应该被调用。但事实并非如此。
请帮助我, 感谢 Kingsmasher1
enter code here
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>
void my_handler(int sival_int, void* sival_ptr)
{
printf("my_handler caught\n");
signal(sig,my_handler);
}
int main()
{
struct sigevent sevp;
sevp.sigev_notify=SIGEV_THREAD;
sevp.sigev_signo=SIGRTMIN;
sevp.sigev_value.sival_ptr=NULL;
sevp.sigev_notify_function=(void*)my_handler;
kill(0,SIGRTMIN); // This should invoke the signal and call the function
}
但是,OP对'sigevent' **没有做任何事情**在逻辑上必须是问题,所以+1。 – 2011-03-01 11:54:06
这是我知道的方法,但我想使用sigevent并使用SIGEV_THREAD来调用该函数。如果你能以这种方式帮助我,那将会很棒 – kingsmasher1 2011-03-01 12:16:00
通过简单的拖网通过文档,你所得到的问题是,sigevent是关于事件处理而不是信号处理。这听起来像你想在你的进程接收到SIGRTMIN信号时在新线程中调用信号处理程序,而sigevent用于async io(请参阅aio手册页)。您需要查看signal()的文档,并且您的操作系统是否支持sigaction()以查看您可以执行的操作。 – Jackson 2011-03-01 15:30:40