使用nptl库时pthread_kill()给出分段错误

时间:2018-08-10 05:34:28

标签: linux posix

我想使用pthread_kill api从主线程向子线程发送信号(SIGUSR1),但它给出了分段错误。以前我使用2.6.20内核版本和gcc 4.2.1 eglbc 2.5 multilib powerpc tolchain。那时它正在正常工作。现在我正在使用带有gcc 4.1.2 elibc 2.5.78 nptl(本地posix线程库)的2.6.34内核版本。在这里,我遇到了细分错误。

我还阅读了pthread_kill()的手册页,因为“ POSIX表示尝试使用生命周期已结束的线程ID会产生未定义的行为,并尝试在调用pthread_kill()时使用无效的线程ID可能会导致细分错误。”

我认为线程ID初始化应该是正确的或其他我找不到的东西。有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

有一些可能的原因:

  • 您传递的参数永远不是有效的线程ID。
  • 该参数是有效的线程ID,但该线程已终止。
  • 有一些常规的内存损坏。

首先,您可以通过打印创建的线程的ID以及传递给pthread_kill()的ID进行验证

接下来,您必须找出线程何时结束。

最后,很难找到此类错误,也没有一般建议。