进程死后,io_uring 的 I/O 还在运行?

Is There I/O After Death? What Happens to Io_uring When a Process Dies

进程死后,io_uring 的 I/O 还在运行?

大多数人直觉认为,进程被 kill 并回收后,其 I/O 也会随之终止。但在 Linux 的 io_uring 机制下,这一直觉是错误的:进程虽已死亡,其提交的写请求仍可能在内核中存活并继续写入存储。我通过实验验证了这一现象,发现普通 io_uring 在进程退出后仍可能完成延迟写入,而 SQPOLL 和原生 AIO 则会在 waitpid() 中等待 I/O 完成。这意味着,若你的恢复协议依赖 waitpid() 作为 I/O 屏障,可能会遭遇严重问题。解决方案是引入显式锁机制,确保旧进程的 I/O 彻底结束前,新进程无法接管设备。

waitpid() 告诉你进程已死,但并未告诉你它的 I/O 也已死亡。

同日更多故事

2026-09-06