![获取 Node.js 进程的 stdin 文件描述符的引用,也必须在 MacOS 上工作](https://linux22.com/image/115022/%E8%8E%B7%E5%8F%96%20Node.js%20%E8%BF%9B%E7%A8%8B%E7%9A%84%20stdin%20%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%E7%9A%84%E5%BC%95%E7%94%A8%EF%BC%8C%E4%B9%9F%E5%BF%85%E9%A1%BB%E5%9C%A8%20MacOS%20%E4%B8%8A%E5%B7%A5%E4%BD%9C.png)
在 Linux 机器上,如果我有进程的 pid,我可以使用如下命令写入该进程的 stdin:
/proc/<pid>/fd/0
但在 MacOS 上,这似乎不可能。有人告诉我应该使用mkfifo
/ 命名管道。
然而,使用命名管道使问题更难解决。如果您控制进程的启动,MacOS 上是否有办法在文件系统上存储对 fd 的引用?
例如,如果我这样做:
#!/usr/bin/env node
node script.js &
NODEJS_PID=$!
我可以轻松获取该进程的 pid,如上面的 NODEJS_PID 变量所示。但是,有没有办法捕获对此 Nodejs 进程的 stdin 文件描述符的引用?
如果我可以获得 fd 的路径,那就太酷了,因为我需要从另一个进程写入该 fd。
答案1
由于您知道 OS X 上的 PID,lsof
因此可能对您有用:
lsof -p 12345 | awk '$4=="0u"{print $NF}'
/dev/ttys039
# then you can write to the FD
echo "hi" > /dev/ttys039