【问题标题】:What makes a pthread defunct?是什么让 pthread 失效了?
【发布时间】:2010-09-13 00:37:05
【问题描述】:

我正在使用当前创建后台线程 (PTHREAD_DETACHED) 然后调用 pthread_exit(0) 的多线程程序(使用 pthreads)。我的问题是该进程随后被列为“已失效”,奇怪的是似乎在 /proc 中并不“真正存在”(这违背了我的调试策略)

我希望满足以下要求:

  • 程序应在循环中运行函数 A 并运行函数 B 一次
  • 给定程序/proc/$pid/exe的PID,/proc/$pid/maps和/proc/$pid/fd必须是可访问的(当进程失效时,它们都是空链接或无效链接)
  • 必须可以像往常一样使用 CTRL+C 和 CTRL+Z 暂停/中断程序

编辑:我犹豫是否要更改程序的接口,以便将 A 放在“主”线程中,将 B 放在衍生线程中(它们目前处于另一种方式)。能解决问题吗?

【问题讨论】:

    标签: c linux multithreading pthreads procfs


    【解决方案1】:

    您可以挂起等待信号的主进程的执行,或者不分离等待其终止的线程(使用默认的PHTREAD_CRATE_JOINABLE),使用pthread_join()

    【讨论】:

      【解决方案2】:

      你有什么理由不能反过来做:让主线程运行循环,并在后台线程中执行一次性任务?

      【讨论】:

      • 如果这样可以解决问题,我将面临重组软件以便完成的挑战。实际上,这是我第一次真正接触 pthread。
      【解决方案3】:

      不是最优雅的设计,但也许你可以在退出之前阻塞主线程:

       while(1) {
             pause();
       }
      

      然后您可以为 SIGINT 和 SIGTERM 安装一个信号处理程序来中断循环。最简单的方法是:exit(0) :-)。

      【讨论】:

        猜你喜欢
        • 2013-02-14
        • 2011-11-12
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2013-05-30
        • 2010-11-03
        相关资源
        最近更新 更多