【发布时间】:2018-01-06 20:59:15
【问题描述】:
信号可以在任何线程或主程序本身中接收。 我从主程序创建了一个辅助线程。所以我的程序中有两个线程 1. 主线程(进程本身) 2. 辅助线程。我只希望每当信号到达我的辅助线程时,它应该向我的主线程(程序)发送信号。我正在使用 pthread_kill(main_threadid, sig) 从辅助线程内的信号处理程序寄存器发送信号。但。我观察到每次信号发送到主线程接收到辅助子本身并且信号处理程序落入接收发送信号的循环中。
#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;
}
假设我使用其进程 ID 从终端向进程发送 SIGINT。
【问题讨论】:
-
我不确定您要做什么,但使用全局信号进行线程间通信可能不是正确的方法。
标签: linux signals posix multithreading