gpt4 book ai didi

c - 信号处理程序不工作

转载 作者:行者123 更新时间:2023-12-04 10:16:10 24 4
gpt4 key购买 nike

我正在使用 czmqzmq我的代码中的库。我已经为 SIGINT 注册了一个信号处理程序调用 signal主要。代码如下所示:

#include "czmq.h"

void sig_int(int signal);

void* pub_handler(){
zctx_t *context = zctx_new ();
void *publisher = zsocket_new (context, ZMQ_PUB);

zsocket_connect (publisher, "tcp://localhost:5555");

sleep(1);

char topic[20] = "REQ: speedlimit";

// while (true)
{
sleep( randof(10) );
zstr_sendm (publisher, topic);
zstr_send (publisher, "driver analysis data");
}
zctx_destroy (&context);

}

void* sub_handler(){
zctx_t *context = zctx_new();
void *subscriber = zsocket_new (context, ZMQ_SUB);

zsocket_connect (subscriber, "tcp://localhost:5557");

srandom ((unsigned) time (NULL));

char subscription [20] = "RESP: speedlimit" ;

zsocket_set_subscribe (subscriber, subscription);

while (true) {
char *topic = zstr_recv (subscriber);
if(!topic)
break;
char *data = zstr_recv (subscriber);
assert (streq (topic, subscription));
puts (topic);
puts (data);
free (topic);
free (data);
}
zctx_destroy (&context);
}

int main(int argc, const char *argv[])
{
pthread_t pub_id, sub_id;
signal (SIGINT, sig_int);
pthread_create(&pub_id, NULL, pub_handler, NULL);
pthread_create(&sub_id, NULL, sub_handler, NULL);

pthread_join(pub_id, NULL);
pthread_join(sub_id, NULL);

return 0;
}

void sig_int(int signal){
printf (" Interrupted\n");
exit(0);
}

编译为 gcc -o app app.c -lpthread -lczmq -lzmq .

上面的代码在 ctrl+c 时没有进入信号处理程序。中断。
czmq 有什么问题?或 zmq图书馆以及它应该如何处理?

最佳答案

documentation for zctxzctxSIGINT 设置自己的信号处理程序和 SIGTERM ,可能会覆盖您的信号处理程序。

Sets up signal (SIGINT and SIGTERM) handling so that blocking calls such as zmq_recv() and zmq_poll() will return when the user presses Ctrl-C.



它还说 zctx已弃用,取而代之的是 zsock ,它似乎没有根据其文档设置信号处理程序。所以我的第一个建议是使用新的 zsock套接字 API。

但是,似乎在这两种情况下您也可以调用 zsys_handler_set(NULL); (记录 here )显式禁用 CZMQ 中的默认 SIGINT/SIGTERM 处理。

PS: printf不是异步信号安全的,这意味着它不应该在信号处理程序中使用。见 here获取 POSIX 中的异步信号安全函数列表。

关于c - 信号处理程序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com