Oto co się dzieje gdy proces chce czytać z pustego pipe'a:
void pipe_wait(struct inode * inode) { DECLARE_WAITQUEUE(wait, current); current->state = TASK_INTERRUPTIBLE; add_wait_queue(PIPE_WAIT(*inode), &wait); up(PIPE_SEM(*inode)); schedule(); remove_wait_queue(PIPE_WAIT(*inode), &wait); current->state = TASK_RUNNING; down(PIPE_SEM(*inode)); } static ssize_t pipe_read( ... ) { ... if (PIPE_EMPTY(*inode)) { ... for (;;) { pipe_wait(inode); if (!PIPE_EMPTY(*inode)) break; } } ... }Powyższe funkcje pochodzą z pliku fs/pipe.c