對執行緒傳送signal
阿新 • • 發佈:2018-11-13
學習對執行緒 傳送 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; }