恐怕我不确定我在这里做错了什么。我有一个线程应用程序,它在启动时启动 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) ,它并没有做太多事情,并且在启动之后只是因为它不能被杀死而存在。
我可能在这里忘记了一些重要的事情。但在阅读了一些关于线程的基本指南后无法澄清什么......
谢谢您的帮助