Threads, signaux et system(..)

Le
fabrizio
Bonjour,

Je rencontre des problèmes en utilisant l'appel system(..) dans un
programme multithread (pthread) qui utilise (et donc bloque) SIGCHLD.

Les signaux sont bloqués dans tous les threads. Un des threads utilise
pthread_sigwait(..) pour récupérer les signaux et appeler le
gestionnaire approprié. Dans ce contexte, lorsque je fais des appels
system(..), alors que la commande se passe bien (retourne 0), system(..)
retourne la valeur 1.

Je suis en train de faire des tests complémentaires. Je me demandais
simplement si le problème était connu, si vous pouviez compléter ma
compréhension du problème, ou tout autre chose qui pourrait m'aider.

Fabrice
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
fabrizio
Le #119270
26/11/2007 13:57 - fabrizio :
Les signaux sont bloqués dans tous les threads. Un des threads utilise
pthread_sigwait(..) pour récupérer les signaux et appeler le
gestionnaire approprié. Dans ce contexte, lorsque je fais des appels
system(..), alors que la commande se passe bien (retourne 0), system(..)
retourne la valeur 1.


Quelques investigations plus tard.

Le comportement est apparemment normal. Il y a une race condition entre
le thread qui gère les signaux et le thread qui attend la mort du fils
(qui effectue le "sh -c ..").

system(..) retourne bien -1 dans le cas où waitpid(..) retourne
immédiatement (le fils n'existe plus). On peut discriminer ce cas
d'erreur des autres par errno positionné à une valeur particulière.

Si quelqu'un a une élégante (ou idiomatique) manière de gérer ce cas, je
suis preneur.

F.

Publicité
Poster une réponse
Anonyme