Adopter un processus
Le
fabrizio
Bonjour,
Un processus A (de contrôle/monitoring) enfante des processus de type B
(processus métier). A est prévenu de la mort des B par SIGCHLD. Mon
problème survient quand A décède, puis est ressuscité de ses propres
cendres : dans ce cas, A interroge le système (à base de moultes ps |
grep | awk > /tmp/) pour savoir quel est l'état des processus B. En
particulier quand ils existent, A enregistre leur PID respectif et s'en
sert pour reprendre leur contrôle sans avoir à les ré-instancier. En
revanche les processus B étant devenus des fils d'Init dans cette sombre
histoire de paricide, A ne reçoit plus SIGCHLD et n'est plus informé de
la mort de ses enfants adoptés par un autre.
Je crois avoir lu dans un message d'il y a fort longtemps qu'adopter des
processus n'était pas possible. Pouvez-vous me confirmer que cela est
toujours le cas ?
Quelqu'un aurait-il une idée de contournement de ce problème, le but
étant de trouver un moyen par lequel A serait informé de la mort des B ?
Toute sera grandement appréciée.
Vous remerciant,
Fabrice
Un processus A (de contrôle/monitoring) enfante des processus de type B
(processus métier). A est prévenu de la mort des B par SIGCHLD. Mon
problème survient quand A décède, puis est ressuscité de ses propres
cendres : dans ce cas, A interroge le système (à base de moultes ps |
grep | awk > /tmp/) pour savoir quel est l'état des processus B. En
particulier quand ils existent, A enregistre leur PID respectif et s'en
sert pour reprendre leur contrôle sans avoir à les ré-instancier. En
revanche les processus B étant devenus des fils d'Init dans cette sombre
histoire de paricide, A ne reçoit plus SIGCHLD et n'est plus informé de
la mort de ses enfants adoptés par un autre.
Je crois avoir lu dans un message d'il y a fort longtemps qu'adopter des
processus n'était pas possible. Pouvez-vous me confirmer que cela est
toujours le cas ?
Quelqu'un aurait-il une idée de contournement de ce problème, le but
étant de trouver un moyen par lequel A serait informé de la mort des B ?
Toute sera grandement appréciée.
Vous remerciant,
Fabrice

Poser une question


En effet.
Le plus simple sera d'ouvrir un pipe ou une socket entre les deux.
Lorsque qu'un des processus meurt, on peut recevoir un signal SIGPIPE
quand on écrit sur le pipe ou la socket. Il suffit donc que les
processus s'envoient périodiquement un jeton (s'ils n'ont vraiement
rien d'autre à se dire...), pour être informés lorsque l'autre meurt.
--
__Pascal Bourguignon__ http://www.informatimago.com/
Until real software engineering is developed, the next best practice
is to develop with a dynamic system that has extreme late binding in
all aspects. The first system to really do this in an important way
is Lisp. -- Alan Kay
Même pas besoin de ça : si c'est bien fait, quand l'un des processus meurt,
l'autre reçoit une fin de fichier, ce qui peut se détecter avec poll si on
ne veut pas bloquer. On doit même pouvoir utiliser de l'aio, si on se sent
téméraire.
Un socket serait peut-être mieux, le remplaçant de mettant à l'écoute
sur le même port que le défunt, port que les enfants après avoir reçu
SIGPIPE testeraient de temps en temps.
Enfin faut voir...
--
http://patrick.davalan.free.fr/
Merci à tous pour ces réponses éclairées.