zoukankan      html  css  js  c++  java
  • 对线程发送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.
    ");
    }
    static void *mythread(void *p)
    {
        int signum;
        while (1)
        {
            sigwait(&set, &signum);
            if (SIGUSR1 == signum)
                myfunc();
            if (SIGUSR2 == signum)
            {
                printf("sleep 2s,then exit
    ");
                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:
    ");
            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
    ");
                break;
            }
            else
                continue;
        }
        return 0;
    }
  • 相关阅读:
    MySQL基础_常见命令
    数据库概述
    Nginx学习笔记
    华为OSPF基础配置实验
    华为RIPv2实验
    华为三层交换实验
    web-debug-server
    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware
    haproxy+keepalived练习
    mailx加163邮箱发邮件
  • 原文地址:https://www.cnblogs.com/jyfyonghu/p/9954437.html
Copyright © 2011-2022 走看看