IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Les processus créés par system() ne sont pas arrêtés quand mon service windows stoppe


Sujet :

Programmation et administration système Perl

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Points : 99
    Points
    99
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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é
    Si c'est utile, say

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Points : 99
    Points
    99
    Par défaut
    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 ;-)

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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é
    Si c'est utile, say

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Points : 99
    Points
    99
    Par défaut
    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().

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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é
    Si c'est utile, say

  7. #7
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Peut-être que IPC::System::Simple peut servir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Capture text while avoiding the shell.
    my $file  = capture("cat", "/etc/motd");
    my @lines = capture("cat", "/etc/passwd");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Capturing the exception is easy
    eval {
        run("cat *.txt");
    };
     
    if ($@) {
        print "Something went wrong - $@\n";
    }
    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.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/04/2014, 10h23
  2. Réponses: 3
    Dernier message: 12/03/2012, 08h26
  3. Réponses: 5
    Dernier message: 30/11/2010, 17h04
  4. Réponses: 0
    Dernier message: 14/08/2010, 13h27
  5. Réponses: 5
    Dernier message: 02/07/2007, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo