我使用终端启动 Node.js 进程 A
。
进程 A 使用 child_process.spawn 启动进程 B
。
反过来,进程 B
启动工作进程,这些进程都是相同的类型,我们称它们为 process(es) C
。
我希望 C 进程写入原始终端,但我希望 B 进程写入日志文件。
为了实现这一点,我目前的信念是我必须使用 IPC 或 socket.io 将表示当前终端的文件描述符传递给进程 B。
我正在寻找有关如何使用 IPC/socket.io 传递文件描述符的示例,但是却空手而归。
我真的在寻找两篇信息:
(a) how to get a file descriptor that represents the current terminal (at it's most basic those fd's are simply the integers 0,1,2 for stdin,stdout, and stderr, but I don't think those will work in my case).
(b) I am looking for a code example on how to pass an fd with IPC in Node.js. (Socket.io would work just as well, if that's possible).
最佳答案
根据我的简短研究,文件描述符似乎只是整数,因此可以使用 JSON 传递它们,如下所示:
JSON.stringify({fd: 18});
您可以使用 Node.js、socket.io 等中的 IPC 传递此数据。
尽管如此,我的研究还表明,仅仅因为您手头有一个“代表文件描述符”的整数,并不能为您提供太多保证。
更多信息:
如果您在终端运行“tty”命令,如下所示:
$ tty
你会得到这样的东西:
/dev/ttys001
然后在 Node.js 中,如果你这样做的话
const fd = fs.openSync('/dev/ttys001','a');
然后你将获得 tty 的文件描述符,并且 fd 应该是一个整数。
您可以使用该信息写入 tty,如下所示:
const fd = fs.openSync('/dev/ttys001','a');
const stream = fs.createWriteStream(null,{fd:fd});
process.stdout.pipe(stream);
process.stderr.pipe(stream);
我花了一段时间才弄清楚这一点,所以也许它会对你有所帮助。
关于node.js - 寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619819/