2017-10-08 38 views
0

這是一個奇怪的。節點進程不會退出,除非使用tskill

作爲參考,我在Win 10上使用了MinTTY Git Bash。另外,我的節點版本是v6.11.3,而我的npm版本是3.10.10。另外,"express": "^4.16.1"

我從來沒有遇到快遞服務器突然不關閉的問題。我一直在使用它一段時間,直到今天,我開始有這個問題。

我做我的正常ctrl+c關閉了服務器,並做了npm start如果我做了任何更改。完成後,我收到EADDRINUSE錯誤。我谷歌搜索和谷歌搜索,終於搞清楚,我可以殺死它的唯一方法是與tskill <pid>

我試過taskkill,ps,基本上我可以在Git Bash上使用其他解決方案。 tskill是唯一有效的工作,並且使用netstat -a -o -n來查看進程及其PID的列表。

在對錯誤處理和信號進行了一些研究之後,我確定應該添加一個process.on('SIG<whatever>', system.exit(0));行來允許進程完全退出。

我已經試過SIGINTSIGQUITSIGKILLSIGUSR1SIGUSR2SIGSTOPSIGTSTP。他們都自動關閉進程,成功授予,但沒有我的輸入,所以服務器永遠不會運行。

這裏是我的基本應用:

const express = require('express'); 
const app = express(); 

var config = require('./config')(process.env.NODE_ENV); 
var appPort = process.env.PORT || config.port; 

app.listen(appPort, function() { 
    console.log('UAction Test Server Running on Port ' + appPort + '!'); 
}); 

//process.on('SIGTSTP', console.log('Process Interrupted. Exiting...'), process.exit(0)); 

我真的不知道從哪裏何去何從。讓我知道你需要的任何信息。如果我嘗試了某些方法並且無法正常工作,我會將此主要帖子更新爲可能存在問題的任何人。

我想知道的是:a)如何阻止本機發生?或者如果沒有,那麼b)如何在我的應用程序中實現正確關閉?

編輯:我試過這個與我有另一個應用程序,它做了同樣的事情。

+0

這應該被標記爲一個Windows的問題(我將在明天,傻的StackOverflow紀念這個爲答案)。 'tskill'在其他平臺上不存在*。 –

+0

@CharlesDuffy補充說,謝謝。 –

+0

@DarkSwordsman最近您可能添加了一個覆蓋缺省SIGINT行爲的依賴項。在你的依賴關係中尋找類似'process.on('SIG *')的代碼。如果是這樣,你可能需要重寫這個行爲。 –

回答

0

Here is the issue on Node (even though it ended up not being Node's fault).

問題結束了MinTTY。我不知道爲什麼,但是在安裝Git時使用CMD使其完美無缺。這裏是我的人設置具有此問題:

  • 使用從混帳擊的Git只
  • 使用OpenSSL庫
  • 結帳Windows風格,致力於Unix風格的行結束
  • 使用默認控制檯窗口(CMD)

  • 啓用文件系統緩存

  • 啓用Git的憑據管理器
  • 禁用符號鏈接