pthread Unix

pthread Unix - C - Programmation

Marsh Posté le 21-02-2008 à 15:50:47    

Voilà je bosse actuellement sur un programme d'analyse de flux réseaux et je dois timer une action toute les 5 minutes...
C'est du C standard pas ++
J'avais une idée de comment coder ça mais dans un premier temps j'ai chercher s'il n'existait pas une API C qui permettait de faire de simple timer...
N'en n'ayant pas trouver je me suis repencher sur l'idée de j'avais au départ et qui consiste à faire des posix thread avec une boucle infinie et un sleep (time.h) de 5 minutes. Visiblement ça pourrait fonctionner j'ai fait un code pour tester est c'est fonctionnel... Seulement voilà, je suis un poil perfectionniste est j'ai décidé de surveiller l'utilisation CPU de mon processus père et là bizarrement y'a ecrit <defunct> et le processus est marqué zombie :X mais ce dernier fonctionne parfaitement...
 
Les 2 questions sont donc les suivantes:
- Connaissez vous une API dispo sous UNIX qui gère des timers ?
- Sinon qq'un pourrait t'il m'indiquer pourquoi le process est marqué defunct alors qu'il fonctionne parfaitement.
 
Info supplémentaires:
Machine: Debian Etch Kernel 2.6.18-6-686 livré de base avec la distro SMP of course.
Binaire compilé avec gcc 4.1 -o X X.c -lpthread
 
NB: Ok je sais si ca marche pourquoi je demande, ... Je suis perfectionniste alors si qq'un a une idée :/ faite le moi savoir merci d'avance :P  :hello:  

Reply

Marsh Posté le 21-02-2008 à 15:50:47   

Reply

Marsh Posté le 21-02-2008 à 17:22:39    

Déjà avec du code (ou des extraits), ça serait plus simple.
 
Sinon l'état zombie (en général les processus fils) est l'état dans lequel se trouve un process tant qu'on a pas lu son code de retour. Je dis bien processus et non thread. On peut récupérer le status d'un processus fils terminé (donc dans l'état zombie) via les fonctions wait(), wait3(), wait4() ou waitpid(). Une fois le status récupérer, le processus disparaitra de la liste. On peut le faire aussi automatiquement en utilisant signal() : signal(SIG_CHILD, SIG_IGN).
 
Bon, là où ça devient bizarre c'est que tu parles de processus père (qui devrait être monitoré par le shell).
 
Bah, sinon pour faire des timers, tu peux utiliser select(), sleep(), usleep() ou nanosleep().

Reply

Marsh Posté le 21-02-2008 à 18:52:49    

En fait j'ai trouver ma couille grâce à tes explications sur l'état zombie? D'une part je merite le bucher car j'ai pas compiler avec "-W -Wall" ce qui m'aurait mit sur la voie de mon probleme.
D'autre part mon binaire de test ne contient pas l'intégralité du code principale qui est une boucle de capture libpcap... Donc mon programme arrivait en fin de main sans valeur de retour... Continuait à fonctionner -> Zombie

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed