node.js - 使用 node.js 获取正在运行的进程的标准输入/标准输出

标签 node.js process stdio

我正在使用 child_process.spawn 从 Node 开始一个进程并处理 process.stdout/stderr 数据事件,并写入标准输入。

现在,我的 Node 应用程序可能会崩溃或停止,当它重新启动时,我会通过它的 PID 找到进程,然后我想再次附加到进程的 stdin/stderr/stdout。

有问题的进程可以是任何类似守护进程的程序,所以我无法控制它的行为(例如,我无法设置进程在收到信号时重定向它的 stdio)。

我正在考虑使用屏幕包装进程,将 stdio 重定向到 FIFO 文件(但 customFds 选项在 Node 6 中已弃用),但没有一个看起来像 process.stdin.on 那样干净......

最佳答案

可能有更简单的方法,使用 fuser我在这里创建了一个情况,其中 node.js 产生了一个进程并终止了

xxx@ubuntu:~/node$ node index.js 
Server has started
Request for / received.
About to route a request for /
Request handler 'start' was called

/home/xxx/node/requestHandlers.js:27
response.write(body);
            ^
ReferenceError: body is not defined
at Object.start (/home/xxx/node/requestHandlers.js:27:17)
at route (/home/xxx/node/node/router.js:4:18)
at Server.onRequest (/home/xxx/node/node/server.js:9:3)
at Server.emit (events.js:70:17)
at HTTPParser.onIncoming (http.js:1478:12)
at HTTPParser.onHeadersComplete (http.js:102:31)
at Socket.ondata (http.js:1374:22)
at TCP.onread (net.js:348:27)

如果我运行 fuser <directory from which node started - 示例 fuser /opt/node , 我看到了我创建的 pid

xxxx@ubuntu:~$ fuser node
node:                16490c 16491

只是为了双重确定 - 运行 ps , 我可以看到匹配的 pids

xxxx@ubuntu:~$ ps -ef | grep find | grep -v grep
xxxx     16490     1  0 17:39 pts/0    00:00:00 /bin/sh -c find / -name 'moo'    
xxxx     16491 16490 21 17:39 pts/0    00:00:04 find / -name moo

我可以运行 fuser -k /opt/node杀死并清理从 /opt/node 开始的 pids .我个人使用fuser定期在工作场所和家里清理所有遗留的流程。

我测试了fuser在 ubuntu 和 solaris 上。

注意:您唯一需要注意的是,如果该目录上存在 SSH session ,它将与从该目录启动的任何其他进程一起被破坏。

关于node.js - 使用 node.js 获取正在运行的进程的标准输入/标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167039/

相关文章:

node.js - 单独运行 Mocha 测试

javascript - 如何在 promise 链中传递变量?

node.js - Azure 上的 JSDom( native Node.js 模块)

linux - Linux进程的 "user"区域布局

c - 我的代码给出了 Linux 上的环境变量

javascript - 如何在 Node.js 中的主进程和子进程之间传递流输入/输出

node.js - 基于NodeJS的网站推荐框架

c# - ShellEx : Starting Excel minimized or hidden

c - 学习 Unix 和 C — 查看进程、文件和 v 节点表

关闭 FILE 指针而不关闭底层文件描述符