I/O после смерти: как io_uring переживает процесс
Is There I/O After Death? What Happens to Io_uring When a Process Dies

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