Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Programmation et administration système
Programmation et administration système Vos questions sur les scripts d'administration système, création de compte utilisateur, socket, fork, ping, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/04/2012, 10h36   #1
Glavio
Membre régulier
 
demoulin max
Étudiant
Inscription : juillet 2007
Messages : 70
Détails du profil
Informations personnelles :
Nom : demoulin max
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2007
Messages : 70
Points : 83
Points : 83
Envoyer un message via MSN à Glavio
Par défaut Les processus créés par system() ne sont pas arrêtés quand mon service windows stoppe

Bonjour,

Suite à mon précédent message, j'ai redéfinit mon problème.

Je crée un service windows grâce au module Win32:aemon.
Lors de son démarrage, celui-ci appelle la commande system(), afin de créer un processus qui lance mon programme final.

Le problème est que lorsque je stoppe mon service, les processus appelés ne sont pas fermés. Il semble que le processus appelant (celui qui lance system) et le processus appelé (celui lancé par system()), ne soient pas liés par une relation parent-enfant.

Une idée?
Merci
Glavio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2012, 10h45   #2
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
C'est peut-être au processus lancé par la commande system de créer un lien la commande system ?!...
Mais je n'ai sans doute rien compris...
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2012, 11h03   #3
Glavio
Membre régulier
 
demoulin max
Étudiant
Inscription : juillet 2007
Messages : 70
Détails du profil
Informations personnelles :
Nom : demoulin max
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2007
Messages : 70
Points : 83
Points : 83
Envoyer un message via MSN à Glavio
De ce que je connais des systèmes d'exploitation, c'est plutôt le processus généré qui devient un processus "fils" du processus générant, qui sera dit "père".

C'est du moins ce que j'ai compris: des nuances existent certainements, et des cas différents doivent exister également, mais il me semblait que ce comportement était celui "par défaut".

Après, je ne connais pas assez le comportement de la commande system pour définir la cause de mon problème, et c'est bien pour cela que je viens poser la question ;-)
Glavio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2012, 11h36   #4
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
Ce que je voulais dire, c'est que ce n'était pas la commande system qui était en cause (son fonctionnement est synchrone : elle retourne uniquement si le processus fils qu'elle lance est retourné).
Ce que je voulais dire, c'est que si le processus lancé par la commande system créée lui-même un processus en le détachant de lui-même, ce dernier sera indépendant, et le script ayant lancé la commande system n'y aura plus accès.
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2012, 12h03   #5
Glavio
Membre régulier
 
demoulin max
Étudiant
Inscription : juillet 2007
Messages : 70
Détails du profil
Informations personnelles :
Nom : demoulin max
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2007
Messages : 70
Points : 83
Points : 83
Envoyer un message via MSN à Glavio
C'est bien là mon problème, et j'ai du mal à y trouver une solution.


1) j'ai besoin que la commande system() retourne pour que mon script de service ne soit pas bloqué, et puisse accepter d'autre callback. Dans le cas contraire, mon programme est bien lancé mais le service reste eternellement dans un statut "stopping"

2) Actuellement, il me semble que le processus intermédiaire, appelé par la commande system() est lui même détaché, car lors du stop du script il n'est pas lui même pas fermé.

Ce qui me fait comprendre le sens de ta remarque initiale: il faudrait que j'arrive à lier mon processus intermédiaire et mon processus final au script qui lance system().
Glavio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2012, 11h38   #6
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
Ca m'a donc plus l'air de ressembler à un problème système qu'à un problème perl... as-tu avancé ? (la réponse pourrait également m’intéresser).
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2012, 22h25   #7
juliatheric
Nouveau Membre du Club
 
Homme e. biherengende
Étudiant
Inscription : octobre 2008
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme e. biherengende
Localisation : Burundi

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : octobre 2008
Messages : 8
Points : 37
Points : 37
Peut-être que IPC::System::Simple peut servir.

Code :
1
2
3
# Capture text while avoiding the shell.
my $file  = capture("cat", "/etc/motd");
my @lines = capture("cat", "/etc/passwd");
Code :
1
2
3
4
5
6
7
8
# Capturing the exception is easy
eval {
    run("cat *.txt");
};
 
if ($@) {
    print "Something went wrong - $@\n";
}
Citation:
1) j'ai besoin que la commande system() retourne pour que mon script de service ne soit pas bloqué, et puisse accepter d'autre callback. Dans le cas contraire, mon programme est bien lancé mais le service reste eternellement dans un statut "stopping"
Récupérer le statut du "fork" peut être résolu en essayant de capturer une exception (que ce soit avec run ou capture); capture peut aussi être utilisé pour simplement récupérer la sortie.
juliatheric est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h02.


 
 
 
 
Partenaires

Hébergement Web