ps中的zombiefied线程(用于用c编写的线程程序)

时间:2012-02-13 15:57:30

标签: c pthreads zombie-process

恐怕我不确定我在这里做错了什么。 我有一个线程化的应用程序,启动时启动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是否正在进行;有应用程序的zombiefied实例(文件名也是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),这并没有做太多的事情,并且在启动之后只是因为它不能被杀死。

我可能在这里伪造一些重要的东西。但是在阅读了一些关于线程的基本指南之后无法澄清什么....

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

“僵尸”线程是一个已退出的线程,正在等待有人调用pthread_join来收集其退出状态。所以你的程序中的某个地方你正在创建线程而不是最终为这些线程调用pthread_join或pthread_detach。