恐怕我不确定我在这里做错了什么。 我有一个线程应用程序,在启动时启动 3 个线程
[root@Embest /]# ps
1111 root 608 S fw634c_d_cdm_sb
1112 root 608 S fw634c_d_cdm_sb
1113 root 608 S fw634c_d_cdm_sb
然后在待机模式下等待来自串行的命令。 当它运行并返回到待机模式后,我用 ps 检查发生了什么;应用程序存在僵尸化实例(文件名也是 sq.bracketed)
1114 root Z [fw634c_d_cdm_sb]
...
...
...
1768 root Z [fw634c_d_cdm_sb]
其中约 628 个。
事情是, 我遵循的政策是:
-对于可分离线程-不关心(它们将在完成后自行退出并释放资源)
- 对于可连接线程 - 我在运行 pthread_create 后运行 pthread_join 并等待线程函数完成。像这样:
if (pthread_create(&tmp_thrd_id,&attr_joinable,run_function,(void *)&aStruct)!=0){
DEBUG(printf("thread NOT created \n"));
}else{
DEBUG(printf("thread created !\n"));
if (pthread_join(tmp_thrd_id,NULL)!=0){
DEBUG(printf("\nERROR in joining \n"));
}else{
DEBUG(printf("Thread completed\n"));
}
}
我只在 main 中运行 pthread_exit(NULL) ,它没有做太多事情,并且在启动后只是闲置,因为它不能被杀死。
我可能在这里忘记了一些重要的事情。但在阅读了一些关于线程的基本指南后无法澄清什么......
感谢您的帮助
最佳答案
“僵尸”线程是已退出的线程,正在等待某人调用 pthread_join 来收集其退出状态。因此,您在程序中的某个位置创建了线程,但最终并未为这些线程调用 pthread_join 或 pthread_detach 。
关于c - ps 中的僵尸线程(对于用 c 编写的线程程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263604/