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 peck (site web personnel) . Évalué à 4.
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 castorpilot . Évalué à 2.
[^] # Re: Plusieurs possibilités
Posté par guitouu . Évalué à 1.
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.