![](/img/trans.png)
[英]Difference between a process signal mask, blocked signal set, and a blocked signal?
[英]Can't set a signal mask in signal handler
我有一個小問題:如果我在主程序中執行處理程序功能內的代碼(而不是調用kill),則掩碼會探查並阻止SIGINT。 如果我嘗試在SIGUSR2調用上添加信號掩碼,如下面的代碼所示,則該掩碼不會掩蓋任何SIGINT信號。 這里有什么問題?
pid_t parent_pid;
sigset_t mask;
int main(void) {
signal(SIGINT, handleSigint);
signal(SIGUSR2, handleSigUSR2);
signal(SIGUSR1, handleSigUSR1);
sleep(1);
kill(getpid(), SIGUSR2);
while (1) {
}
}
void handleSigUSR2(int sig) {
signal(SIGUSR2, handleSigUSR2);
printf("StartUSR2\n");
if (sigaddset(&mask, SIGINT) != 0) {
printf("Error with addset\n");
}
if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0) {
printf("Error with sigprocmask\n");
}
printf("EndUSR2\n");
}
當信號處理程序返回時,對sigprocmask執行的更改將被撤消。 我相信沒有明確定義在信號處理程序中設置sigprocmask。 有關Linux的信息,請參見rt_sigreturn(2)的手冊頁
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.