2

我正在使用当前创建后台线程 (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 在衍生线程中(它们目前以另一种方式)。它会解决问题吗?

4

3 回答 3

2

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

于 2008-11-08T12:08:01.720 回答
1

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

于 2008-09-25T08:36:50.553 回答
0

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

 while(1) {
       pause();
 }

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

于 2008-09-25T14:08:02.347 回答