The waitpid is not the only function that can block a process.
Both the sleep(secs) function and pause() cause the calling process to block.
The pause() function unblocks and returns if the process receives and handles a signal (without terminating).
The sleep(sec) function unblocks and returns after sec seconds OR if the process receives and handles a signal (without terminating).