父级处理"listening"子消息

Parent proccess "listening" to child's messages

本文关键字:消息 listening 处理      更新时间:2023-10-16

我正在尝试创建一个程序来捕获某些数据包并分析它们。我使用pcap_loop来捕获数据包,这意味着我的程序无限期地停留在这个命令上。因此,我的解决方案是创建2个进程,其中一个将捕获数据包(子),另一个将使用提取的信息进行分析(父)。由于程序无限期地运行并且实时进行分析,我希望程序看起来像这样:

孩子:

capture_packets(packet_foo());
packet_foo() {
    extract_info();
    send_to_parent()
}
父:

while(1) {
    wait_for_msg_from_child();
    recv_msg();
    analyze();
    printf();
}

我希望你明白我在努力做什么。有可能创造这种交流吗?有没有我想不到的更好的方法?

谢谢。

通常你可以使用一个容器,在这里是一个队列

std::队列

你可以用它做的是一个生产者/消费者模式。

父线程启动子线程,子线程将监视所有信息并将其发送给父线程。但是怎么做呢?

通过将它们放在队列中,顺序得到保留(FIFO),并且在父端,您将需要检查队列中是否存在某些信息。如果没有,你就没有什么可做的了。但如果有的话,你就一个接一个地处理它们。

注意std::queue不是线程安全的,所以你要么自己编写线程安全的实现,要么通过父级和子级共享的互斥锁来保护对std::queue的访问