什么使pthread失效?

时间:2008-09-25 08:29:15

标签: c linux multithreading pthreads procfs

我正在使用当前创建后台线程(PTHREAD_DETACHED)的多线程程序(使用pthread),然后调用pthread_exit(0)。我的问题是,这个过程被列为“已经不存在”,好奇地似乎并没有在/ proc中“真正存在”(这会破坏我的调试策略)

我希望满足以下要求:

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

编辑:我犹豫是否更改了程序的界面,在“主”线程中有A,而在生成的线程中有B(它们目前是另一种方式)。它会解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您可以暂停等待信号的主进程的执行,也可以不使用pthread_join()分离线程(使用默认的 PHTREAD_CRATE_JOINABLE )等待终止。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

 while(1) {
       pause();
 }

然后你可以为SIGINT和SIGTERM安装一个打破循环的信号处理程序。最简单的方法是:退出(0): - )。