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

Bug sous Windows, backticks et threads

3 réponses
Avatar
Olivier Croquette
Salut

J'utilise la dernière version d'Active State sous Windows, et elle a un
vieux bug très gênant :
http://bugs.activestate.com/show_bug.cgi?id=33820

Question aux personnes sous Windows : avez-vous aussi ce bug ? Si non,
quel distribution de Perl utilisez-vous ?

Merci pour vos réponses !

Olivier

3 réponses

Avatar
Paul Gaborit
À (at) Tue, 16 Dec 2008 21:01:06 +0100,
Olivier Croquette écrivait (wrote):
J'utilise la dernière version d'Active State sous Windows, et elle a
un vieux bug très gênant :
http://bugs.activestate.com/show_bug.cgi?id3820

Question aux personnes sous Windows : avez-vous aussi ce bug ? Si non,
quel distribution de Perl utilisez-vous ?

Merci pour vos réponses !



Sous Windows, perl utilise les threads pour pallier l'absence de
véritable 'fork' (qui est utilisé implicitement avec les ``). Il y a
donc interaction entre les threads créés par le script et ceux créés
par l'émulation du 'fork'.

Le bug est-il corrigeable ou non ? Je n'en sais rien. En tous cas, il
est soumis au bonne endroit puisque cette émulation de 'fork' via des
threads a été écrite par ActiveState.

Mais la "bonne" question est : pourquoi avez-vous besoin des `` (ou
plus généralement de 'fork') ?

Une fois votre *vrai* problème exposé, on pourra peut-être vous aider
à vous passer de 'fork'. Peut-être en créant de vrais processus
Windows...

Autre "bonne" question : pourquoi avez-vous besoin des threads ?

Là encore, on peut peut-être trouver un moyen de s'en passer...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Avatar
Olivier Croquette
Paul Gaborit wrote, On 17/12/08 1:24:
Une fois votre *vrai* problème exposé, on pourra peut-être vous aider
à vous passer de 'fork'. Peut-être en créant de vrais processus
Windows...



Je ne fais pas de fork().

Autre "bonne" question : pourquoi avez-vous besoin des threads ?



Pas le choix, je suis appelé dans un contexte threadé.


En l'absence de correctif pour ce bug, je ne vois en fait que 2
alternatives: utiliser system(), ou bien créer vrais process Windows
pour exécuter les commandes externes :(
Avatar
Paul Gaborit
À (at) Fri, 19 Dec 2008 22:19:07 +0100,
Olivier Croquette écrivait (wrote):
Paul Gaborit wrote, On 17/12/08 1:24:
Une fois votre *vrai* problème exposé, on pourra peut-être vous aider
à vous passer de 'fork'. Peut-être en créant de vrais processus
Windows...



Je ne fais pas de fork().



Les backtiks (``) sont un appel implicite à fork().

Autre "bonne" question : pourquoi avez-vous besoin des threads ?



Pas le choix, je suis appelé dans un contexte threadé.

En l'absence de correctif pour ce bug, je ne vois en fait que 2
alternatives: utiliser system(), ou bien créer vrais process Windows
pour exécuter les commandes externes :(



system() fait aussi appel implicitement à fork().

Mais il est possible que le bug ne soit pas sur une interaction entre
threads et émulation de fork() par thread mais plutôt sur la
communication implicite qu'impose les backticks. Dans ce cas, fork()
ou system() fonctionneront.

Dernière remarque : évitez de passer par le shell surtout que sur
Windows, il n'a pas la puissance d'un shell unix.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>