Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Threads, signaux et system(..)

1 réponse
Avatar
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

1 réponse

Avatar
fabrizio
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.