Я написал образец кода для проверки зомбированных ie потоков и обнаружил, что только несуществующие потоки отображаются для основного потока, а не для других потоков.
#include <pthread.h>
#include <stdio.h>
void *print(void *arg)
{
int *i = (int *) arg;
printf("Hi. I'm thread %d\n", *i);
sleep(20);
pthread_exit(NULL);
}
int main()
{
int i;
pthread_t tids[4], value[4];
void *retval;
for (i = 0; i < 4; i++) {
value[i] = i;
pthread_create(tids+i, NULL, print, (value+i));
}
pthread_exit(NULL);
for (i = 0; i < 4; i++) {
printf("Trying to join with tid %d\n", i);
//pthread_join(tids[i], &retval);
printf("Joined with tid %d\n", i);
}
return 0;
}
Вывод 'ps -AL'
23456 23456 pts/4 00:00:00 1 <defunct>
23456 23457 pts/4 00:00:00 1
23456 23458 pts/4 00:00:00 1
23456 23459 pts/4 00:00:00 1
23456 23460 pts/4 00:00:00 1
Когда я пытаюсь изменить logi c, чтобы сначала завершить другой поток перед основным потоком, он не отображается как несуществующий в выводе 'ps -AL'