2015-11-23 131 views
1

有一天,無所事事,我的應用程序決定不死。無法殺掉NodeJS應用程序

當我檢查端口時,按下ctrl + c後,它仍然存在,不僅在我的機器上,而且還在由PM2管理的服務器上,所以我需要每次都去那裏並手工關閉進程。我試圖在我的代碼中查找問題,當我不能確定它只是其中一個依賴關係錯誤時,很快就會出現問題。雖然有點煩人,但我可以用kill -9 PID殺死進程,而且我在前端執行了大部分任務,所以這不是什麼大問題。今天,一個多星期後,問題仍然存在。 我回到了歷史中,選擇了一個我幾個星期前做的提交,其中一切工作都很完美,將NodeJS從5.1.0切換到4.2.1,清除了npm緩存,重新安裝了所有依賴項,但仍然看到問題。 我正在使用LoopbackJS,但通常我只是用「node server/server.js」啓動應用程序,然後發生上述問題,但如果我使用「slc run」,然後嘗試用ctrl + c殺死應用程序它只是永遠掛起,我的意思是我可以按ctrl + c多次按我的意願,它仍然在控制檯前臺運行。

如果不是按下ctrl + c我殺死控制檯中的選項卡,應用程序死亡沒有問題。

這是我跑「lsof的-i TCP:4000」後看到,當應用程序被認爲是死的,但不是

lsof -i tcp:4000

編輯: 運行並與Strongloop進程管理器殺它 - slc start/slc stop可以正常工作,但在開發過程中使用運行NodeJS應用程序(節點server.js)的常規方式會更方便,並且不會改變存在某個問題的事實,最好不要把它藏在地毯下面。

+0

問題只發生在使用slc運行時? –

+0

我編輯的問題。當我用「slc run」運行它時,它試圖殺死它,它只是在前臺掛起,我可以按照我喜歡的那樣按ctrl + c,但是當我使用node server/server.js運行它時,它保留在後臺 –

+0

而且如果使用'slc clusterctl stop'關閉它,問題是否會發生?或更新版本的'slc ctl stop'?我的猜測是它殺死了集羣控制器,但讓子進程繼續運行。 –

回答

1

出於憤怒,我將應用程序剝離出最基本的元素。逐個文件地逐個文件地找到答案。 罪魁禍首是幻影 - https://github.com/sgentle/phantomjs-node。 PATCH版本0.8.2引入了這個錯誤。 Fix是在一個月前創建的,一週前合併,但未在npm上發佈。

相關問題