J'utilise le Perl de Cygwin, mais je pense que ca ne doit rien changer
a la solution (si elle existe !).
Comment lancer une commande systeme ( system("maCommande")
`./macommande` ou autre), recuperer sont PID, attendre dans un autre
thread qques secondes/minutes, puis tuer cette commande ?
Je ne veux pas quitter mon prog avec un 'die', mais juste tuer le
thread qui execute la commande systeme.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
s.Müller
"Nanard" a écrit dans le message de news:
Bonjour, Comment lancer une commande systeme ( system("maCommande") `./macommande` ou autre), recuperer sont PID, attendre dans un autre thread qques secondes/minutes, puis tuer cette commande ? Je ne veux pas quitter mon prog avec un 'die', mais juste tuer le thread qui execute la commande systeme.
Je pense que tu peux t'en sortir avec qq chose de ce style:
"Nanard" <bsegonnes@free.fr> a écrit dans le message de news:
1142344944.358836.27890@p10g2000cwp.googlegroups.com...
Bonjour,
Comment lancer une commande systeme ( system("maCommande")
`./macommande` ou autre), recuperer sont PID, attendre dans un autre
thread qques secondes/minutes, puis tuer cette commande ?
Je ne veux pas quitter mon prog avec un 'die', mais juste tuer le
thread qui execute la commande systeme.
Je pense que tu peux t'en sortir avec qq chose de ce style:
Bonjour, Comment lancer une commande systeme ( system("maCommande") `./macommande` ou autre), recuperer sont PID, attendre dans un autre thread qques secondes/minutes, puis tuer cette commande ? Je ne veux pas quitter mon prog avec un 'die', mais juste tuer le thread qui execute la commande systeme.
Je pense que tu peux t'en sortir avec qq chose de ce style:
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout...
my $pid = fork(); die ("Can't fork().") unless defined $pid; if ($pid==0) { $SIG{CLD}=sub {exit}; $SIG{CHLD}=sub {exit};; exec("(cd ${myRep}/Main;$JAVA -jar toto.jar) ") or die ("Can't exec()"); } else { $SIG{CHLD}="IGNORE"; $SIG{CLD}="IGNORE"; print "parent pid = $$ child pid=$pid n"; sleep(40); kill (-9, $pid); }
Une idee pour se debarasser des zombies ?
Paul Gaborit
À (at) 14 Mar 2006 08:55:43 -0800, "Nanard" écrivait (wrote):
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... [...]
Une idee pour se debarasser des zombies ?
Je ne sais plus pour cygwin, mais si c'est comme ActivePerl, les 'fork' ne sont pas de vrais 'fork' (juste du multi-threads) alors que les 'exec' créent vraiment de nouveaux processus.
Peut-être en cherchant dans les modules Win32::*...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 14 Mar 2006 08:55:43 -0800,
"Nanard" <bsegonnes@free.fr> écrivait (wrote):
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai
mis des $SIG{CHLD} un peut partout...
[...]
Une idee pour se debarasser des zombies ?
Je ne sais plus pour cygwin, mais si c'est comme ActivePerl, les
'fork' ne sont pas de vrais 'fork' (juste du multi-threads) alors que
les 'exec' créent vraiment de nouveaux processus.
Peut-être en cherchant dans les modules Win32::*...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 14 Mar 2006 08:55:43 -0800, "Nanard" écrivait (wrote):
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... [...]
Une idee pour se debarasser des zombies ?
Je ne sais plus pour cygwin, mais si c'est comme ActivePerl, les 'fork' ne sont pas de vrais 'fork' (juste du multi-threads) alors que les 'exec' créent vraiment de nouveaux processus.
Peut-être en cherchant dans les modules Win32::*...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Stéphane Müller
"Nanard" a écrit dans le message de news:
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... ...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu " bizarres ". Je n'ai pas encore tout compris :-)) Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai jamais testé ...
"Nanard" <bsegonnes@free.fr> a écrit dans le message de news:
1142355343.431384.88590@j52g2000cwj.googlegroups.com...
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai
mis des $SIG{CHLD} un peut partout...
...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu "
bizarres ". Je n'ai pas encore tout compris :-))
Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai
jamais testé ...
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... ...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu " bizarres ". Je n'ai pas encore tout compris :-)) Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai jamais testé ...
Paul Gaborit
À (at) Wed, 15 Mar 2006 10:54:31 +0100, "Stéphane Müller" écrivait (wrote):
"Nanard" a écrit dans le message de news:
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... ...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu " bizarres ". Je n'ai pas encore tout compris :-))
Lire 'perlport' et en particulier la section concernant 'fork', puis ensuite lire 'perlfork' et en particulier la section concernant 'exec'.
Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai jamais testé ...
C'est, me semble-t-il, la meilleure solution pour piloter proprement un autre processus sous Windows.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 15 Mar 2006 10:54:31 +0100,
"Stéphane Müller" <stephane.muller@laposte.net> écrivait (wrote):
"Nanard" <bsegonnes@free.fr> a écrit dans le message de news:
1142355343.431384.88590@j52g2000cwj.googlegroups.com...
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai
mis des $SIG{CHLD} un peut partout...
...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu "
bizarres ". Je n'ai pas encore tout compris :-))
Lire 'perlport' et en particulier la section concernant 'fork', puis
ensuite lire 'perlfork' et en particulier la section concernant
'exec'.
Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai
jamais testé ...
C'est, me semble-t-il, la meilleure solution pour piloter proprement
un autre processus sous Windows.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 15 Mar 2006 10:54:31 +0100, "Stéphane Müller" écrivait (wrote):
"Nanard" a écrit dans le message de news:
Merci, mais mon processus reste en tant que zombie... et pourtant j'ai mis des $SIG{CHLD} un peut partout... ...
Une idee pour se debarasser des zombies ?
Ah oui exact, le fork et les appels système sous Windows sont un peu " bizarres ". Je n'ai pas encore tout compris :-))
Lire 'perlport' et en particulier la section concernant 'fork', puis ensuite lire 'perlfork' et en particulier la section concernant 'exec'.
Tu devrais peut-être regarder du coté du module Win32::Process mais je n'ai jamais testé ...
C'est, me semble-t-il, la meilleure solution pour piloter proprement un autre processus sous Windows.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nanard
Merci.
Mais mon script : je le developpe sous Windows, mais il se peut qu'un jour il tourne sur Solaris. Une solution portable serait bien venue. Je vais donc voir du cote de 'perlfork' 'exec' ...
Merci.
Mais mon script : je le developpe sous Windows, mais il se peut qu'un
jour il tourne sur Solaris. Une solution portable serait bien venue.
Je vais donc voir du cote de 'perlfork' 'exec' ...
Mais mon script : je le developpe sous Windows, mais il se peut qu'un jour il tourne sur Solaris. Une solution portable serait bien venue. Je vais donc voir du cote de 'perlfork' 'exec' ...
Paul Gaborit
À (at) 15 Mar 2006 05:19:40 -0800, "Nanard" écrivait (wrote):
Mais mon script : je le developpe sous Windows, mais il se peut qu'un jour il tourne sur Solaris. Une solution portable serait bien venue. Je vais donc voir du cote de 'perlfork' 'exec' ...
Il y a trop de différences entre ces plateformes pour imaginer qu'une solution générique inter-processus fonctionne efficacement. Le plus simple est alors d'isoler correctement le code spécifique de gestion du parallèlisme (ou du multi-porcessus) dans un module (ou dans quelques fonctions) afin de le spécialiser facilement lors du changement de plateforme.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 15 Mar 2006 05:19:40 -0800,
"Nanard" <bsegonnes@free.fr> écrivait (wrote):
Mais mon script : je le developpe sous Windows, mais il se peut qu'un
jour il tourne sur Solaris. Une solution portable serait bien venue.
Je vais donc voir du cote de 'perlfork' 'exec' ...
Il y a trop de différences entre ces plateformes pour imaginer qu'une
solution générique inter-processus fonctionne efficacement. Le plus
simple est alors d'isoler correctement le code spécifique de gestion
du parallèlisme (ou du multi-porcessus) dans un module (ou dans
quelques fonctions) afin de le spécialiser facilement lors du
changement de plateforme.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 15 Mar 2006 05:19:40 -0800, "Nanard" écrivait (wrote):
Mais mon script : je le developpe sous Windows, mais il se peut qu'un jour il tourne sur Solaris. Une solution portable serait bien venue. Je vais donc voir du cote de 'perlfork' 'exec' ...
Il y a trop de différences entre ces plateformes pour imaginer qu'une solution générique inter-processus fonctionne efficacement. Le plus simple est alors d'isoler correctement le code spécifique de gestion du parallèlisme (ou du multi-porcessus) dans un module (ou dans quelques fonctions) afin de le spécialiser facilement lors du changement de plateforme.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nanard
J'ai trouve !!!! au bout de 4 jours ! Au cas ou sa peut aider d'autres personnes :
Mon prog. Perl doit lancer un prog. Java, le tuer toutes les xxx minutes, puis le relancer, etc Le tout sous cygwin.
J'ai pas reussis a tuer directement le process/thread Java lance depuis system ou exec ou ` ` J'ai dus lancer mon prog. java dans un .bat Puis Perl lance et tue correctement mon .bat :
my $pid = fork(); die ("Can't fork().") unless defined $pid; if ($pid==0) { # fils exec ("toto.bat"); # lance java -jar toto.jar qui ne s'arrete JAMAIS } else { # pere $SIG{CLD}="IGNORE"; print "parent pid = $$ child pid=$pid n"; sleep(40); print "reveil, je vais tuer Java...n"; `kill $pid`; }
J'ai trouve !!!! au bout de 4 jours !
Au cas ou sa peut aider d'autres personnes :
Mon prog. Perl doit lancer un prog. Java, le tuer toutes les xxx
minutes, puis le relancer, etc Le tout sous cygwin.
J'ai pas reussis a tuer directement le process/thread Java lance depuis
system ou exec ou ` `
J'ai dus lancer mon prog. java dans un .bat
Puis Perl lance et tue correctement mon .bat :
my $pid = fork();
die ("Can't fork().") unless defined $pid;
if ($pid==0) {
# fils
exec ("toto.bat"); # lance java -jar toto.jar qui ne s'arrete
JAMAIS
}
else {
# pere
$SIG{CLD}="IGNORE";
print "parent pid = $$ child pid=$pid n";
sleep(40);
print "reveil, je vais tuer Java...n";
`kill $pid`;
}
J'ai trouve !!!! au bout de 4 jours ! Au cas ou sa peut aider d'autres personnes :
Mon prog. Perl doit lancer un prog. Java, le tuer toutes les xxx minutes, puis le relancer, etc Le tout sous cygwin.
J'ai pas reussis a tuer directement le process/thread Java lance depuis system ou exec ou ` ` J'ai dus lancer mon prog. java dans un .bat Puis Perl lance et tue correctement mon .bat :
my $pid = fork(); die ("Can't fork().") unless defined $pid; if ($pid==0) { # fils exec ("toto.bat"); # lance java -jar toto.jar qui ne s'arrete JAMAIS } else { # pere $SIG{CLD}="IGNORE"; print "parent pid = $$ child pid=$pid n"; sleep(40); print "reveil, je vais tuer Java...n"; `kill $pid`; }