如何在SIGINT上停止node.js检查器/ Chrome调试器?

Nar*_*esh 13 node.js express node-inspector

我有以下代码从终端捕获^ C并正常关闭我的Express应用程序:

process.on('SIGINT', () => {
    console.log('SIGINT received ...');
    console.log('Shutting down the server');

    server.close(() => {
        console.log('Server has been shutdown');
        console.log('Exiting process ...');
        process.exit(0);
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用启动节点实例--inspect,则上述代码无法停止检查器和Chrome调试器.当我重新启动我的应用程序时,我收到以下错误:

Starting inspector on 127.0.0.1:9229 failed: address already in use
Run Code Online (Sandbox Code Playgroud)

如何优雅地停止我的应用程序以避免此错误?

可以使用完整的代码在这里.

Kho*_*lam 29

似乎VSCode,Puppeteer,nodemon,express等导致了这个问题,你在后台运行了一个进程或者只是关闭了调试区[浏览器,终端等]或者其他什么,无论如何,你可以在CMD中运行

$ ps ax | grep node
Run Code Online (Sandbox Code Playgroud)

然后

$ killall -9 node
Run Code Online (Sandbox Code Playgroud)

它不是最好的解决方案,我也建议您使用此端口查找进程然后发送关闭信号

$ sudo ss -lptn 'sport = :9229'
Run Code Online (Sandbox Code Playgroud)

要么

$ sudo netstat -nlp | grep :9229
Run Code Online (Sandbox Code Playgroud)

要么

$ sudo lsof -n -i :9229 | grep LISTEN
Run Code Online (Sandbox Code Playgroud)

然后:

$ sudo kill <pid>
Run Code Online (Sandbox Code Playgroud)

或者只是[两个步骤合二为一]

$ sudo kill `sudo lsof -t -i:9229`
Run Code Online (Sandbox Code Playgroud)

要么

$ sudo kill $(sudo lsof -t -i:9229)
Run Code Online (Sandbox Code Playgroud)


Gi5*_*Gi5 6

这对我有用:

fuser -k -n tcp 9229
Run Code Online (Sandbox Code Playgroud)