是什么导致 pthread 失效?
-
02-07-2019 - |
题
我正在使用一个多线程程序(使用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):-)。
不隶属于 StackOverflow