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

我希望满足以下要求:

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

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

有帮助吗?

解决方案

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

其他提示

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

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

 while(1) {
       pause();
 }

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top