| 
                        
 示例代码: 
[cpp] view plaincopyprint? 01.#include <stdio.h>    02.#include <pthread.h>    03.#include <unistd.h>    04.#include <stdlib.h>    05.#include <signal.h>    06.   07.void sig_thread_func(int sig)   08.{   09.    printf("sig_thread_func : sig = %dn", sig);   10.}   11.void sig_func(int sig)   12.{   13.    printf("sig_func : sig = %dn",sig);   14.}   15.   16.void *func1(void *arg)   17.{   18.    signal(SIGUSR1, sig_thread_func);   //线程1先运行,设置了signal    19.   20.    sigset_t set;   21.    sigfillset(&set);   22.    sigdelset(&set, SIGUSR1);   23.    pthread_sigmask(SIG_SETMASK, &set, NULL);//线程1屏蔽了除了SIGUSR1外的所有信号    24.   25.    printf("pthread 1 runn");   26.    int i;   27.    for(i = 0; i < 7; ++i)   28.    {   29.        printf("1...n");   30.        sleep(1);   31.    }   32.    return 0;   33.}   34.void *func2(void *arg)   35.{   36.    printf("pthread 2 runn");   37.    int i;   38.    for(i = 0; i < 7; ++i)   39.    {   40.        printf("2...n");   41.        sleep(1);   42.    }   43.    return 0;   44.}   45.   46.int main()   47.{   48.    pthread_t tid1, tid2;   49.    pthread_create(&tid1, NULL, func1, NULL);   50.    pthread_create(&tid2, NULL, func2, NULL);   51.   52.    sleep(1);   53.    signal(SIGUSR1, sig_func);  //覆盖了线程1设置的signal    54.   55.    //向线程1发送SIGUSR1,SIGUSR2    56.    sleep(1);   57.    pthread_kill(tid1, SIGUSR1);//调动handler    58.    sleep(1);   59.    pthread_kill(tid1, SIGUSR2);//屏蔽了,无响应    60.   61.    //向线程2发送SIGUSR1,SIGUSR2    62.    sleep(1);   63.    pthread_kill(tid2, SIGUSR1);//调用handler    64.    sleep(1);   65.    //pthread_kill(tid2, SIGUSR2);//会终止进程,是进程!    66.   67.    sigset_t set;   68.    sigfillset(&set);   69.    sigprocmask(SIG_SETMASK, &set, NULL);//进程屏蔽了所有信号    70.   71.    sleep(1);   72.    kill(getpid(), SIGUSR1);//调动handler?其实是线程1响应的    73.   74.    pthread_join(tid1, NULL);   75.    pthread_join(tid2, NULL);   76.   77.    return 0;   78.}  
                        (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |