【问题标题】:Parent proccess "listening" to child's messages父进程“倾听”孩子的消息
【发布时间】:2016-10-15 15:45:47
【问题描述】:

我正在尝试创建一个程序来捕获某些数据包并对其进行分析。我使用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();
}

我希望你明白我想要做什么。是否有可能创造这种交流方式?有没有更好的方法来做到这一点,我想不出?

谢谢。

【问题讨论】:

  • 当然,两个进程可以通信,尤其是在只有一个方向的情况下。你甚至可以走这么远,设计一个简单的文本协议,让两者通过管道进行对话,例如child | parentcapture_packets | analyzer.
  • 是的,我知道这绝对有可能,但我对父母“等待”孩子发送消息的部分更感兴趣
  • 您使用哪种编程语言?
  • 我使用的是 C++,但我主要使用 C 风格的编程,因为我对它不是很有经验
  • 使用管道,父级将阻塞直到有东西要读取。所以等待是“免费”的。

标签: c++ c parent-child ipc


【解决方案1】:

通常你可以使用一个容器,在你的情况下是一个队列

std::queue

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

父线程启动子线程,它将监视任何信息并将它们发送给父线程。但是如何?

通过将它们放在队列中,订单得到保留 (FIFO) 和父端,您需要检查队列中是否存在某些信息。如果不是,你没有什么可做的。但是如果有的话,你一个一个拿来处理。

请注意 std::queue 不是线程安全的,因此您要么编写自己的线程安全实现,要么通过父子之间共享的互斥锁保护对 std::queue 的访问

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多