sigsuspend
Function Prototype
int sigsuspend(const sigset_t *sigmask);Function
- 將 signal mask 設為
sigmask後 pause 直到收到 signal sigsuspend會在收到 signal 並且 handler 後回傳才返回- 可以想成 sigprocmask 然後 pause 但是是 atomic operation
- 此 system call 返回後會恢復原本的 signal mask
Why do we need sigsuspend?
if (sigprocmask(...) < 0)
err_sys(...);
pause();
...假設 sigprocmask unblock 了 SIGINT 然後我們希望 pause 直到 SIGINT 傳過來,但是如果在 sigprocmask 執行後 context switch,結果 SIGINT 在 pause 還沒執行前就 generate 並且 deliver,那麼 pause 可能就變成 forever blocking 了
而 sigsuspend 的 atomic 性質就可以避免這個問題