如何在 ac 程序(在 Linux 上)中接收用 sigqueue 发送的信号?
如何在 ac 程序(在 Linux 上)中接收用 sigqueue 发送的信号?
如果只是使用kill来发送信号,我只需添加一个接收器,其中包含类似这样的东西
signal(SIGUSR1, sigusr1);
,该接收器指向这样一个简单的函数:
void sigusr1()
{
signal(SIGUSR1,sigusr1);
printf("SIGUSR1 ....\n");
}
但是如果我使用sigqueue发送信号,那么我会怎么做?
谢谢 Johan
添加一个 sigaction:
struct sigaction action;
action.sa_flags = SA_SIGINFO;
action.sa_sigaction = &sigusr2;
if (sigaction(SIGUSR2, &action, NULL) == -1) {
perror("sigusr: sigaction");
_exit(1);
}
sigusr2 看起来像这样:
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);
}
仅供参考 sigqueue 示例
sigval value;
for(int i=10;i<20;i++)
{
value.sival_int = i;
sigqueue(pid,SIGUSR2, value);
}
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?
Thanks
Johan
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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用sigaction。
Use sigaction.