正確使用sigsuspend函數需要按照以下步驟進行:
以下是一個簡單的示例代碼:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void handler(int signo) {
// 信號處理函數
printf("Received signal %d\n", signo);
}
int main() {
sigset_t set;
// 設置需要阻塞的信號
sigemptyset(&set);
sigaddset(&set, SIGINT);
// 設置阻塞信號集
sigprocmask(SIG_BLOCK, &set, NULL);
// 設置信號處理函數
signal(SIGINT, handler);
// 掛起進程直到收到一個信號
sigsuspend(&set);
// 恢復原本的阻塞信號集
sigprocmask(SIG_UNBLOCK, &set, NULL);
return 0;
}
在上面的示例中,首先設置了需要阻塞的信號SIGINT,并將其添加到自定義的信號集中,然后設置了阻塞信號集并注冊了信號處理函數。接著調用sigsuspend函數掛起進程,直到收到SIGINT信號。在信號處理函數中打印收到的信號,并最后恢復原本的阻塞信號集。