杀死NodeJS子进程

5
在开发中,我在NodeJS项目中犯了错误。这些错误会导致出现类似以下的错误信息。
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:742:11)
    at Server._listen2 (net.js:1148:14)
    at listen (net.js:1170:10)
    at net.js:1253:9
    at dns.js:82:18
    at process._tickCallback (node.js:343:11)

没问题,我按下了ctrl+C并重新启动了进程,但我看到一些派生的子进程仍然在运行。我该如何杀死由根进程派生的所有进程?
示例代码:
module.exports.start = function(options) {
  gulp.watch(['*.js'], onServerRestart);
  onServerRestart();

  var server;
  function onServerRestart(e) {
    if (server) server.kill();
    server = require('child_process').spawn("node", ['--harmony', './server.js'], {stdio: "inherit", cwd: process.cwd() });
  };
};

如果您正在使用Linux,则可以执行 ps xau | grep node 命令,然后终止所需的进程。 - Salem
@Salem 当然,但我该如何在nodejs进程内处理它? :) - xpepermint
哦,抱歉 :) 尝试发送 kill 信号给它 (server.kill('SIGKILL'))。 - Salem
@Salem 我知道如何手动处理这个问题,但是正如我所说,在出现错误时,子进程不会自动终止。 - xpepermint
我从未在Node中杀死过其他节点进程,所以我唯一的建议是使用类似于node-supervisor的工具来管理节点进程。不过,你可以使用child-process来执行Salem的第一个建议。 - Tony
2个回答

1
这意味着,即使你认为已经退出了所有服务器,实际上仍有一个正在运行,可能就是你想访问的那个服务器。
因此,请转到终端并输入以下内容:
killall node

这应该解决它。
BAM。

1
将此添加
  process.on('uncaughtException', function(err) {
    console.log(err);
    server.kill();
    process.kill();
  });

解决了这个问题。有什么建议可以在你的应用程序中处理它吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接