【问题标题】:pthread_kill() is giving segmentation fault when using nptl library使用 nptl 库时 pthread_kill() 出现分段错误
【发布时间】:2018-08-10 05:34:28
【问题描述】:

我想使用 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 初始化应该是正确的,否则我无法找到。有人可以帮忙解决这个问题吗?

【问题讨论】:

    标签: linux posix


    【解决方案1】:

    有一些可能的原因:

    • 您传递的参数从来都不是有效的线程 ID。
    • 参数是有效的线程 ID,但线程已经终止。
    • 存在一些常规内存损坏。

    首先你可以通过打印创建线程的 ID 和传递给 pthread_kill() 的 ID 来验证

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2017-06-06
      • 2017-08-26
      • 2018-06-18
      • 2019-05-10
      • 2018-02-15
      • 2016-01-15
      相关资源
      最近更新 更多