一、主线程发送USR1信号给子线程1 ,子线程中添加 信号捕捉,子线程2没有捕捉信号,导致直接退出
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#define handle_error_en(en, msg) \
do {errno = en; perror(msg); exit(EXIT_FAILURE); }while(0)
static void *sig_thread1(void *arg)
{
sigset_t *set = (sigset_t *)arg;
int ret, sig;
sigaddset(set, SIGUSR1);
pthread_sigmask(SIG_SETMASK, set, NULL);
for (;;)
{
// 等待被屏蔽的信号 SIGQUIT
printf("before sigwait1..\n");
ret = sigwait(set, &sig);
if (ret != 0)
handle_error_en(ret, "thread2 sigwait");
printf("Signal handling thread1 got signal %d\n", sig);
}
}
static void *sig_thread2(void *arg)
{
sigset_t set;
sigemptyset(&set);
int ret, sig;
for (;;)
{
// thread2 没有设置捕捉任何信号,
// 除SIGQUIT