Dlaczego Linux bierze pod uwagę proces, którego główny wątek zakończył się w procesie zombie, i czy istnieje sposób, aby tego uniknąć?Proces zombie, mimo że wątki wciąż działają.
W kodzie poniżej I:
- stworzenie procesu z główną nici
- utworzyć nowe odłączony gwint
pthread_exit
główny gwintpthread_exit
oderwany gwint
Przed # 3, ps(1)
pokazuje mój proces jako normalny pro cess. Po 3, jednak, ps(1)
pokazuje mój proces jako zombie (np. 2491 pts/0 00:00:00 thread-app <defunct>
) , mimo że nadal ma działające wątki.
Czy można opuścić główny wątek, ale unikać wchodzenia w stan zombie?
Kod:
#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
może chcesz 'ptherad_join()'? –
Chcę nowy wątek, który będzie żył dłużej niż oryginalny wątek główny. I ta główna nić jest zniszczona poprawnie, bez bycia zombie. – likern
, więc chcesz odłączyć wątek od średniej nici za pomocą http://linux.die.net/man/3/pthread_detach :) – MimiEAM