2017-01-20 24 views
0

,我創建了兩個過程,從最初的過程我運行使用叉子如何關閉我是新的的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

你需要遵循一些原則。

錯誤是顯而易見的,您的子進程仍在使用該端口,並且無法啓動一個新的套接字來偵聽同一個進程。

如何解決/避免這種情況?

  1. 你的孩子的過程通常不應該比父母長。只有當你的目標是demonize a process through forking

  2. 開始/停止時,您應該創建a lock file with the PIDs(進程ID),並且只允許執行一個實例。當你停止父母的過程時,孩子也應該停下來,當你重新啓動父母時,它應該警告孩子仍然在跑步。