2016-04-05 1 views
0

Je crée une bibliothèque qui va démarrer un processus qui va alors forcer child_processes; C'est un peu comme utiliser le module cluster avec un serveur, sauf dans mon cas ni le parent/master ni les child_processes ne sont des serveurs.Node.js: Lancer un groupe de processus pour que je puisse tuer plus tard si j'en ai besoin

Ce que je dois faire est de pouvoir donner à l'utilisateur la possibilité de tuer le processus une fois que tout commence. La seule façon que je connaisse de faire cela, est d'avoir le processus parent écouter sur un port spécifique. Ensuite, je peux communiquer avec le processus parent, et il peut être responsable de tuer le child_processes.

Le seul problème avec ceci, c'est que si l'utilisateur exécute deux groupes de processus différents ou plus côte à côte, alors je devrais incrémenter le port que chacun écoute, et l'utilisateur ne sait pas vraiment ce que les ports sont plus.

Quelqu'un connaît-il le problème que j'essaie de résoudre et y a-t-il une bonne solution pour cette situation?

Si je finis par écouter sur un port spécifique, devrais-je utiliser le module net du nœud principal? Probablement l'option net.Socket() https://nodejs.org/api/net.html#net_class_net_socket

On dirait que j'ai besoin de faire ce processus dans un serveur afin qu'il puisse écouter sur un port et recevoir facilement des messages.

Répondre

1

Lancez-vous avec le module child_process et les processus enfants se termineront lorsque le parent le fera.

Ensuite, envoyez au parent un signal comme SIGINT ou SIGHUP ou SIGKILL. Voir https://nodejs.org/api/process.html#process_signal_events

// Start reading from stdin so we don't exit. 
process.stdin.resume(); 

process.on('SIGINT',() => { 
    console.log('Got SIGINT. Press Control-D to exit.'); 
}); 
+0

ok, peut-être travailler, mais comment l'utilisateur de ma bibliothèque connaît-elle l'ID de processus? –

+0

Lorsque je lance le processus parent, comment l'utilisateur sait-il quel processus envoyer le signal SIGINT? –

+0

oh, vous pouvez utiliser control-c mais si c'est un processus d'arrière-plan, je veux dire. –