信号可以在任何线程中接收到的主线程(主程序)或主要程序本身。 我从主程序创建了一个辅助线程。所以在我的程序中有两个线程1.主线程(进程本身)2.辅助线程。我只是希望每当信号到达我的辅助线程时,就应该发送信号给我的主线程(程序)。我正在使用pthread_kill(main_threadid,sig)从辅助线程内的信号处理程序寄存器发送信号。但。我观察到每个时间信号发送到主线程接收到的辅助子本身和信号处理器落在接收发送信号的环路中。pthread_kill()不发送信号到
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
// global variable
pthread_t main_threadId;
struct sigaction childpsa;
// Signal Handler for Auxiliary Thread
void signalHandler_Child(int param)
{
printf("Caught signal: %d in auxiliary Thread", param);
pthread_kill(main_threadId, param);
}
void *childFun(void *arg)
{
childpsa.sa_handler = signalHandler_Child;
sigaction(SIGTERM, &childpsa, NULL);
sigaction(SIGHUP, &childpsa, NULL);
sigaction(SIGINT, &childpsa, NULL);
sigaction(SIGCONT, &childpsa, NULL);
sigaction(SIGTSTP, &childpsa, NULL);
while (1) {
// doSomething in while loop
}
}
int main(void)
{
main_threadId = pthread_self();
fprintf(stderr, "pid to signal %d\n", getpid());
// create a auxiliary thread here
pthread_t child_threadId;
int err = pthread_create(&child_threadId, NULL, &childFun, NULL);
while (1) {
// main program do something
}
return 1;
}
说我发送SIGINT从终端使用其进程ID处理。
我不太确定你想要做什么,但使用全局信号,线程间通信可能是不正确的方法。 – thrig