【问题标题】:Poco AsyncChannel does not exit on forked process exitPoco AsyncChannel 不会在分叉进程退出时退出
【发布时间】:2014-11-18 15:33:58
【问题描述】:

问题:

从 C 库中调用/初始化 Poco 代码,使用加载器(第三方 C 程序,我们的代码是 c++)。

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

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

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

【问题讨论】:

    标签: c++ fork poco raii dynamic-loading


    【解决方案1】:

    在这里回复:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      相关资源
      最近更新 更多