зомбированные потоки в ps (для многопоточной программы, написанной на c) - PullRequest
0 голосов
/ 13 февраля 2012

Боюсь, я не уверен, что я делаю здесь не так.У меня есть многопоточное приложение, которое запускает 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_join после запуска pthread_create и жду завершения многопоточной функции.как это:

        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"));
            }
        }

Я запускаю только pthread_exit (NULL) в main, который не делает ничего, и после запуска просто лежит только потому, что его нельзя убить.

iЯ, вероятно, подделываю что-то жизненно важное здесь.но не могу уточнить, что после прочтения нескольких основных руководств по темам ...

спасибо за вашу помощь

1 Ответ

0 голосов
/ 13 февраля 2012

Поток "зомби" - это поток, который завершил свою работу и ждет, пока кто-нибудь вызовет pthread_join, чтобы получить свой статус выхода. Итак, где-то в вашей программе вы создаете потоки и в конечном итоге не вызываете pthread_join или pthread_detach для этих потоков.

...