Почему Linux рассматривает процесс, основной поток которого завершил процесс зомби, и есть ли способ избежать этого?Процесс Zombie, хотя потоки все еще запущены
В коде ниже I:
- Создать процесс с одной основной нитью
- Создать новый отдельностоящий нить
pthread_exit
основного потокаpthread_exit
стороннего нить
До # 3, ps(1)
показывает мой процесс как обычный про налог. Однако после №3 ps(1)
показывает мой процесс как зомби (например, 2491 pts/0 00:00:00 thread-app <defunct>
) , хотя он все еще имеет потоки.
Можно ли выйти из основной темы, но не заходить в состояние зомби?
Код:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
void *thread_function(void *args)
{
printf("The is new thread! Sleep 20 seconds...\n");
sleep(20);
printf("Exit from thread\n");
pthread_exit(0);
}
int main(int argc, char **argv)
{
pthread_t thrd;
pthread_attr_t attr;
int res = 0;
res = pthread_attr_init(&attr);
res = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
res = pthread_create(&thrd, &attr, thread_function, NULL);
res = pthread_attr_destroy(&attr);
printf("Main thread. Sleep 5 seconds\n");
sleep(5);
printf("Exit from main process\n");
pthread_exit(0);
}
# ./thread-app
может быть, вы хотите 'ptherad_join()'? –
Я хочу новую тему, которая будет жить дольше, чем исходная основная тема. И эта главная нить уничтожается правильно, без зомби. – likern
, поэтому вы хотите отсоединить поток от средней нити, используя http://linux.die.net/man/3/pthread_detach :) – MimiEAM