ZeroMQとfork(2)ではまった
僕はかなりはまったのですが、ZeroMQのcontextはfork(2)で複製できません。以下のようなコードを書くと死にます。forkする前にcontextを破棄するか、preforkしておく必要があります。
URLを忘れたのですが、MLでもpreforkしておいてよみたいな流れだったので、バグとかではなく、こういうものなのだと思います。
#include <iostream> #include <stdexcept> #include <zmq.hpp> #include <unistd.h> bool xfork() { pid_t const pid = fork(); if (pid == -1) { throw std::runtime_error("fork"); } return pid == 0; } int main() { zmq::context_t ctx(1); if (xfork()) { // なんかする } else { // なんかする } return 0; }