Warum betrachtet Linux einen Prozess, dessen Hauptzweig ein Zombie-Prozess ist, und gibt es eine Möglichkeit, dies zu vermeiden?Zombie-Prozess, obwohl Threads noch laufen
In dem folgenden Code I:
- einen Prozess mit einem Hauptthread erstellen
- Erstellen ein neues frei stehendes Gewindes
pthread_exit
den Haupt-Threadpthread_exit
der abgelöste Faden
Vor # 3, ps(1)
zeigt mein Prozess wie ein normaler Profi cess. Nach # 3 zeigt ps(1)
jedoch meinen Prozess als Zombie (z. B. 2491 pts/0 00:00:00 thread-app <defunct>
) , obwohl es noch laufende Threads hat.
Ist es möglich, den Hauptthread zu beenden, aber vermeiden, in einen Zombie-Zustand zu gehen?
Code:
#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
vielleicht möchten Sie 'ptherad_join()'? –
Ich möchte einen neuen Thread, der länger als der ursprüngliche Hauptthread leben wird. Und dieser Hauptfaden wird korrekt zerstört, ohne Zombie zu sein. – likern
also wollen Sie den Thread aus dem mittleren Thread mit Hilfe von http://linux.die.net/man/3/pthread_detach :) – MimiEAM