c - ps 中的僵尸线程(对于用 c 编写的线程程序)

标签 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 检查发生了什么;应用程序存在僵尸化实例(文件名也是 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/

相关文章:

c++ - 在 Linux 上运行自定义协议(protocol)插件的原因

c - 我想创建更多线程来计算用户给定输入的总和

linux - 在 Linux 上检测 pid 是否为僵尸

c++ - 僵尸进程和 fork

c - 如何仅针对某些子进程等待()并防止僵尸

c - 使用 fputs 将多行写入文件

c++ - 哪些目录包含 C/C++ 中的语句搜索?

c++ - boost::details::pool::pthread_mutex 和 boost::details::pool::null_mutex

c - 如何读取 C 文件中方括号内的字符串,每行包含几个此类字符串

c - 确定数组中元素的频率