Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre régulier
    Profil pro demoulin max
    Étudiant
    Inscrit en
    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

    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é

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    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é
    Using strict and warnings is good for you.

  3. #3
    Membre régulier
    Profil pro demoulin max
    Étudiant
    Inscrit en
    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

    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é

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    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é
    Using strict and warnings is good for you.

  5. #5
    Membre régulier
    Profil pro demoulin max
    Étudiant
    Inscrit en
    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

    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é

    Inscrit en
    avril 2009
    Messages
    3 054
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 3 054
    Points : 3 910
    Points
    3 910

    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é
    Using strict and warnings is good for you.

  7. #7
    Nouveau Membre du Club
    Homme Profil pro e. biherengende
    Étudiant
    Inscrit en
    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

    Par défaut

    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";
    }
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •