Forum Programmation.c probleme fork/exec/kill

Posté par  .
Étiquettes : aucune
0
18
jan.
2008
Bonjour,

Je lance un programme en console :
# mon_prog &
puis je le termine avec :
# pkill -15 mon_prog
(15 = SIGTERM)
et le programme exit proprement.

Maintenant, au lieu de lancer mon programme en ligne de commande, je le lance depuis un programme de test :
fork + execl(mon_prog)
Je lance mon test puis j'essaye de kill mon programme, mais ca ne marche pas :
pkill -15 mon_prog ==> aucun effet
pkill -9 mon_prog ==> ca marche mais ca kill salement mon application... (or je veux un exit propre)
(9 = SIGKILL)

Avez vous une idée de ce qu'il se passe ? Pourquoi le kill sigterm ne marche pas ?
merci
  • # Plusieurs possibilités

    Posté par  (site web personnel) . Évalué à 4.

    Quand tu fais un fork il manque dans ton programme parent un wait après si tu veux qu'une fois mort le programme ne devienne pas un zombie.

    Pour ne pas avoir a faire de wait il faut complètement détacher le fils. Donc après le fork, dans le fils, fermer les file descriptor ouverts, se détacher du tty, réinitialiser les gestionnaires de signaux, et je dois en oublier.

    Cherche comment faire un démon en c sur un moteur de recherche et je pense que tu trouveras ton bonheur.
    • [^] # Re: Plusieurs possibilités

      Posté par  . Évalué à 2.

      C'est en partie expliqué dans man 3 daemon non ?
      • [^] # Re: Plusieurs possibilités

        Posté par  . Évalué à 1.

        merci pour vos réponses.

        Oui c'est un peu expliqué dans man daemon. D'ailleurs cette fonction est interessante, si je comprends bien il faut faire :
        - fork
        - et dans le fils, faire daemon

        Le probleme c'est que "daemon" refait fork, puis exit mon process fils et le démon est executé dans le 2eme processus fils créé ... du coup je ne vois pas trop comment récupérer les pid du daemon ...
        Donc je pense que je vais devoir créer le daemon moi meme. J'ai trouvé sur le net tout ce qu'il faut faire (setsid, tty, fd, stdou/err/in, signaux etc).

        Si vous voyez comment utiliser daemon en récupérant le pid du daemon, ca m'interesse car c'est plus simple.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.