Boost C++ 库

……是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu《C++ Coding Standards》

Fork - Boost C++ 函数库
PrevUpHomeNext

Boost.Asio 支持使用 fork() 系统调用的程序。前提是程序在适当的时候调用 io_context.notify_fork(),Boost.Asio 将会重新创建任何内部文件描述符(例如用于唤醒 reactor 的“self-pipe trick”描述符)。通知通常如下执行:

io_context_.notify_fork(boost::asio::io_context::fork_prepare);
if (fork() == 0)
{
  io_context_.notify_fork(boost::asio::io_context::fork_child);
  ...
}
else
{
  io_context_.notify_fork(boost::asio::io_context::fork_parent);
  ...
}

用户定义的 `service` 也可以通过重写 io_context::service::notify_fork() 虚函数来感知 `fork`。

请注意,通过 Boost.Asio 的公共 API 可访问的任何文件描述符(例如 basic_socket<>posix::stream_descriptor 等底层描述符)在 `fork` 过程中不会被更改。程序有责任根据需要管理这些描述符。

参见

io_context::notify_fork()io_context::fork_eventio_context::service::notify_fork()Fork 示例


PrevUpHomeNext