Détecter le moment où le processus parent sorties
Je vais avoir un processus parent qui est utilisé pour traiter le serveur redémarre. Il sera le signal de l'enfant pour arrêter l'écoute pour les nouvelles demandes, l'enfant sera le signal de la mère qu'il a cessé de l'écouter, alors le parent sera le signal de l'enfant qu'il peut commencer à écouter. De cette façon, nous pouvons accomplir de moins de 100ms pour un redémarrage de ce niveau (j'ai un zéro temps d'arrêt petit-fils de redémarrer aussi, mais ce n'est pas toujours assez de redémarrage).
Le chef de service va tuer le parent quand il est temps pour l'arrêt. Comment l'enfant peut-il détecter que le parent a terminé?
Les signaux sont envoyés à l'aide de l'entrée standard stdin et stdout du processus enfant. Peut-être que je peux détecter la fin d'un flux stdin? Je suis l'espoir d'éviter un intervalle d'interrogation. Aussi, je voudrais que ce sera vraiment une détection rapide si possible.
OriginalL'auteur George Bailey | 2011-04-04
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous mettre un sortie écouteur dans le processus parent qui signale les enfants?
Edit:
Vous pouvez également utiliser nœud-ffi (Nœud Étrangères Interface de la Fonction) à l'appel ...
prctl(PR_SET_PDEATHSIG, SIGHUP);
... sous Linux. ( homme 2 prctl )
Si vous êtes à l'arrêt, de vos processus, vous recevrez
SIGTERM
premier. Vous pouvez capturer ce et effectuer le nettoyage dans le de cette façon:process.on('SIGTERM', function () { console.log('Got SIGTERM, exiting...'); // do some cleanup here... process.exit(0); });
Et oui, avoir des enfants, vérifier périodiquement si leur
PPID
est devenu1
est une bonne solution de repli pour le cas où le parent n'a pas à sortir proprement. Voir aussi: stackoverflow.com/questions/269494/...OriginalL'auteur entropo
une solution plus simple pourrait être en vous inscrivant pour "déconnecter" dans le processus de l'enfant
Je suis totalement d'accord que c'est une grande solution. Dans mon cas, je suis à l'écoute sur SIGTERM cas de processus parent et aussi (si quelque chose se passe mal et j'ai besoin de redémarrer le processus parent) lors de la déconnexion de l'événement. Dans mon cas, le problème est perceptible, puisque l'enfant de créer un serveur contenant de port, donc en commençant à nouveau causer "ERRADDRINUSE". Cela résout le problème 🙂
OriginalL'auteur regata
Cette réponse, c'est juste pour faire un exemple de nœud-ffi solution entropo a proposé (ci-dessus) (comme mentionné il fonctionne sur linux):
c'est le processus parent, il est frai de l'enfant et de sortie au bout de 5 secondes:
c'est le processus de l'enfant (situé dans child.js)
sans le courant.prctl(1,15) l'enfant s'exécute indéfiniment même si le parent est en train de mourir. Ici, il sera signalée avec un signal SIGTERM, qui seront traitées normalement.
Il ressemble à nœud-ffi a été dépréciée en faveur de nouveaux module "ffi".
OriginalL'auteur hellvinz
Je commence Node.JS dans un natif de OSX application de fond de travailleur. Pour faire node.js la sortie lorsque le parent processus qui consomme de l'node.js stdout meurt/sorties, je ne les suivants:
Facile comme ça, mais je ne suis pas sûr si c'est ce que vous avez demandé 😉
OriginalL'auteur Sascha Reuter