gpt4 book ai didi

c++ - Poco AsyncChannel 不会在 fork 进程退出时退出

转载 作者:行者123 更新时间:2023-11-28 06:34:19 33 4
gpt4 key购买 nike

问题:

使用加载程序(第 3 方 C 程序,我们的代码在 C++ 中)从 C 库内部调用/初始化 Poco 代码。

  1. 程序加载我们的库,我们的库初始化 Poco::Logger 并在记录器中使用 AsyncChannel + FileChannel。
  2. 从这个过程中 fork 。
  3. 在子进程中运行一些线程。
  4. 尝试退出子进程,加入线程。
  5. AsyncChannel 的析构函数在 close() 上阻塞,本质上是轮询队列和休眠。
  6. 调用 AsyncChannel 的析构函数时,_queue 始终有 1 个元素,我认为这是由于父进程的运行和 fork 方式所致。

现在的问题是: fork 进程不调用构造函数而只是复制内存,这是 gcc 的问题吗?我尝试在 AsyncChannel::AsyncChannel() 中调用 _queue.clear() 但没有结果...

有没有人见过这个问题?任何建议的解决方案?

最佳答案

此处回复:

http://pocoproject.org/forum/viewtopic.php?f=10&t=6378

总结:在fork之后而不是之前创建线程。 Poco::Util::Timer 和其他类也有同样的问题。

关于c++ - Poco AsyncChannel 不会在 fork 进程退出时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998019/

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