如何知道 Linux 节点子进程使用的所有资源、连接、套接字等

How to know all the resources, connections, sockets, etc. in use by a Node child-process on Linux

我动态生成一个node脚本,然后通过node fork一个子进程来执行,并将输出传回给父进程

父级:

  //...build child.js
  var child  = require('child_process');
  childProcess = child.fork('child.js');
  childProcess.on('message', 
       function(dataFromChild) { 
         //process data 
   });

在子进程中

process.send(objectToSend,function() {
 //code to send objectToSend
 //process.exit(0);
}

实际代码要广泛得多。我还使用 socket.io 和 mysql。我想当我完成处理后,我将关闭子进程中所有打开的数据库连接和套接字。但是,子进程不会退出。如果我在退出点执行 process.exit(0) ,它会退出。我想一定有什么东西是开放的,不允许它自然退出。我怎么知道它是什么?

我尝试了一个简单的子脚本,基本上是一个带有 console.log 语句的单行脚本,用于测试它是否会在没有退出语句的情况下退出。确实如此。

您可以使用linux lsof 程序列出子进程拥有的所有打开的文件描述符。在节点中,active-handles npm 包应该可以帮助您追踪分配的侦听器、超时等。