进程死后 I/O 还会继续吗?io_uring 在进程死亡后的行为
普通 io_uring 在 Linux 上提交写入后,进程被 SIGKILL 并 waitpid 回收,写入仍可能在毫秒级之后完成并修改存储——waitpid 不是 I/O 屏障。 实测在 Linux 6.6.79 上,通过 dm-delay 制造 3 秒写入延迟:进程在 7.5ms 内被回收,但约 3 秒后其写入才到达存储,1024 个位置全部被改变。 原生 AIO 和 SQPOLL 模式下,延迟写入会拖长 waitpid 本身(约 2.2 秒),不会在回收后继续完成。 用 flock(LOCK_EX) 可以构造可靠的 I/O 屏障:旧请求持有 struct file 引用,锁在最终引用释放前不会移除,新进程必须等锁才能获取。 YDB 生产环境已用此协议打开设备,不论 AIO 还是 io_uring。




