是什么让pthread失效了?
时间:2020-03-06 14:42:33 来源:igfitidea点击:
我正在使用一个多线程程序(使用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在生成的线程中(它们当前以另一种方式)。它能解决问题吗?
解决方案
我们是否有相反的理由不能做这些事情:让主线程运行循环,并在后台线程中执行一次性任务?
不是最优雅的设计,但也许我们可以在退出之前阻塞主线程:
while(1) { pause(); }
然后,我们可以为SIGINT和SIGTERM安装一个中断循环的信号处理程序。最简单的方法是:exit(0):-)。
我们可以暂停主进程的执行以等待信号,也可以不分离线程(使用默认的PHTREAD_CRATE_JOINABLE)以pthread_join()终止线程。