Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何知道发送到线程的信号_Multithreading_Linux Kernel_Signals_Multiprocessing - Fatal编程技术网

Multithreading 如何知道发送到线程的信号

Multithreading 如何知道发送到线程的信号,multithreading,linux-kernel,signals,multiprocessing,Multithreading,Linux Kernel,Signals,Multiprocessing,我有一个运行2.6.33的基于ARM的嵌入式系统。 一个主进程A创建另一个进程B。这两个进程都是具有实时RR策略的应用进程。此proc-B使用pthread_create()创建几个线程。我猜其中一个线程做错了,进程被终止 在process-A中使用wait()时,返回状态1(正常),如下所示 我想知道如何得到哪个信号已经被传递到了里面的哪个线程 过程B waitpid(-1, &status, WUNTRACED | WCONTINUED) and if (WIFEXITED

我有一个运行2.6.33的基于ARM的嵌入式系统。 一个主进程A创建另一个进程B。这两个进程都是具有实时RR策略的应用进程。此proc-B使用pthread_create()创建几个线程。我猜其中一个线程做错了,进程被终止

在process-A中使用wait()时,返回状态1(正常),如下所示

我想知道如何得到哪个信号已经被传递到了里面的哪个线程 过程B

waitpid(-1, &status, WUNTRACED | WCONTINUED)
  and 
  if (WIFEXITED(status))
    printf("Process %d terminated normally, status %d\n", pid,WEXITSTATUS(status));
跟随链接,但获得与1相同的状态。


有没有其他方法可以找出所有线程的正确退出状态,并在有任何线程被发送到这些线程时发出信号?

好的,首先,您应该知道多线程和信号不能很好地混合使用!这在很大程度上是因为信号被传送到PID;一个MT应用程序有1个PID但有多个线程;哪个线程将“获取”或处理该信号

因此,“通常”策略是阻止除一个线程之外的所有线程中的所有信号——一个专用的同步“信号处理器”线程(它通常发出阻塞sigwait(2);返回值是刚刚到达的信号!)。 演示混合线程和信号

其次,为了了解进程如何/为什么死亡的一些细节——从技术上讲,是接收到一个信号——使用带有sau SIGINFO标志的sigaction(2)。信号处理程序签名现在是:

void func(int signo, siginfo_t *info, void *context)
struct siginfo\u t将为您提供有关此进程如何/为什么接收此信号的所有详细信息!参考号:。 当然,使用这种方法确实意味着使用sigaction而不是sigwait。。异步与同步处理。 嗯