对线程发送signal

学习对线程 发送 signal

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>

static sigset_t set;

void myfunc()
{
    printf("get SIGUSR1.\n");
}
static void *mythread(void *p)
{
    int signum;
    while (1)
    {
        sigwait(&set, &signum);
        if (SIGUSR1 == signum)
            myfunc();
        if (SIGUSR2 == signum)
        {
            printf("sleep 2s,then exit\n");
            sleep(2);
            break;
        }
    }
}
 
int main()
{
    char tmp;
    int iCh = 0;
    pthread_t tid;
    void *status;
    sigemptyset(&set);
    sigaddset(&set, SIGUSR1);
    sigaddset(&set, SIGUSR2);
    sigprocmask(SIG_SETMASK, &set, NULL);
    pthread_create(&tid, NULL, mythread, NULL);
    while (1)
    {
        printf("Please input a char:\n");
        scanf("%c", &tmp);
        getchar(); // get "enter key"
        
        if ('a' == tmp)
        {
            pthread_kill(tid, SIGUSR1); //发送SIGUSR1,打印字符串。
        }
        else if ('q' == tmp)
        {
            //发出SIGUSR2信号,让线程退出,如果发送SIGKILL,线程将直接退出。
            pthread_kill(tid, SIGUSR2);
            //等待线程tid执行完毕,这里阻塞。
            pthread_join(tid, &status);
            printf("finish\n");
            break;
        }
        else
            continue;
    }
    return 0;
}

 

posted @ 2018-11-13 20:13  靖意风  Views(742)  Comments(0Edit  收藏  举报