本文介绍了我如何收到sigqueue在C程序发送(在Linux上)的信号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我如何收到收到sigqueue在C程序发送(在Linux上)的信号?
如果只是使用kill发送信号我只需添加一个接收器像这样
信号(SIGUSR1,SIGUSR1);
这点简单的功能是这样的:
无效SIGUSR1()
{
信号(SIGUSR1,SIGUSR1);
的printf(SIGUSR1 .... \\ n);
}
但是,如果我发送的信号与sigqueue,我会怎么做呢?
谢谢
约翰·
添加sigaction的:
结构sigaction的行动;action.sa_flags = SA_SIGINFO;
action.sa_sigaction =安培; SIGUSR2;如果(的sigaction(SIGUSR2,&安培;作用,NULL)== -1){
PERROR(sigusr:sigaction的);
_exit(1);
}
在哪里SIGUSR2会是这个样子:
无效SIGUSR2(INT SIGNO,siginfo_t *信息,无效*额外)
{
无效* ptr_val =信息 - > si_value.sival_ptr;
INT int_val =信息 - > si_value.sival_int;
的printf(信号%D,值%d个\\ N,SIGNO,int_val);
}
和只是一个参考例子sigqueue
sigval值;对于(INT I = 10; I< 20;我++)
{
value.sival_int = I;
sigqueue(PID,SIGUSR2,价值);
}
解决方案
使用
How do I receive receive a signal sent with sigqueue in a c program (on linux)?
If just use kill to send a signal I just add a receiver with something like this
signal(SIGUSR1, sigusr1);
that point to a simple function like this:
void sigusr1()
{
signal(SIGUSR1,sigusr1);
printf("SIGUSR1 ....\n");
}
But if I send a signal with sigqueue, how would I do then?
ThanksJohan
Add a sigaction:
struct sigaction action;
action.sa_flags = SA_SIGINFO;
action.sa_sigaction = &sigusr2;
if (sigaction(SIGUSR2, &action, NULL) == -1) {
perror("sigusr: sigaction");
_exit(1);
}
Where sigusr2 would look something like this:
void sigusr2(int signo, siginfo_t *info, void *extra)
{
void *ptr_val = info->si_value.sival_ptr;
int int_val = info->si_value.sival_int;
printf("Signal %d, value %d \n", signo, int_val);
}
And just for ref a sigqueue example
sigval value;
for(int i=10;i<20;i++)
{
value.sival_int = i;
sigqueue(pid,SIGUSR2, value);
}
解决方案
Use sigaction.
这篇关于我如何收到sigqueue在C程序发送(在Linux上)的信号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!