正确使用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信号。在信号处理函数中打印收到的信号,并最后恢复原本的阻塞信号集。