1. 程式人生 > >對執行緒傳送signal

對執行緒傳送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; }