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_event、io_context::service::notify_fork()、Fork 示例。