I/O после смерти: как io_uring переживает процесс

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

I/O после смерти: как io_uring переживает процесс

Большинство предполагает, что I/O умирает вместе с процессом. Но для обычного io_uring это не так: после kill и waitpid() записанные ранее данные могут всё ещё находиться в ядре и достигать устройства позже. Эксперименты автора на Linux 6.6.79 показывают, что для io_uring без SQPOLL и для native AIO процесс завершается только после завершения всех запросов, тогда как обычный io_uring позволяет записям «ожить после смерти». Это критично для приложений, использующих waitpid() как барьер синхронизации. Решение — использовать flock() для блокировки устройства, что гарантирует завершение всех I/O до снятия блокировки.

waitpid() сообщил нам, что задача мертва, но не сообщил, что её I/O мёртв.

Ещё за этот день

2026-09-06