Let's start with the sigwait(3):
include <signal.h> int sigwait(const sigset_t *set, int *sig);
The sigwait(3) library API allows a process (or thread) to block, wait, until any signal in the signal-set set is pending delivery to it. The moment a signal arrives, the sigwait is unblocked; the particular signal that arrived, its integer value, is placed in the value-result second parameter sig. Under the hood, the sigwait removes the signal just delivered from the process (or thread) pending mask.
Thus, the sigwait(3) is advantageous to the pause(2) by virtue of the following:
- You can wait upon the delivery of particular signals to the process
- When one of those signals is delivered, its value is known
The return value ...