如何关闭fork子进程

时间:2017-01-20 10:24:43

标签: nodes

我是nodejs的新手,我创建了两个进程,从第一个进程开始,我使用fork运行第二个进程

var fork = require('child_process').fork;
var productionApp = fork("../secondProcess");

当我第一次运行第一个进程时,第二个进程也开始了。

现在的问题是,当我尝试重新启动或停止并启动第一个进程时,我收到此错误:

{ [Error: listen EADDRINUSE :::9000]
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 9000 }

此处端口9000位于secondProcess。 当我停止第一个进程时,secondProcess不会停止。

所以我只想知道如何在父进程停止时停止子进程。

1 个答案:

答案 0 :(得分:1)

你需要遵循一些原则。

错误很明显,您的子进程仍在使用该端口,您无法启动新的套接字来侦听同一个进程。

如何解决/避免这种情况?

  1. 您的孩子过程通常不应超过父母的寿命。只有当您的目标是demonize a process through forking

  2. 启动/停止时,您应创建a lock file with the PIDs(进程ID),并且只允许执行单个实例。当您停止父进程时,也应该停止子进程,当您重新启动父进程时,它应该警告仍在运行子进程。