通过文件描述符将输入发送到交互式进程

通过文件描述符将输入发送到交互式进程

如何找到进程读取输入的文件描述符?

背景

我运行一个维特在 Alpine 容器中开发时(发音为 veet)服务器。目前我登录容器并使用命令手动启动Vite vite --host '0.0.0.0' --port 3000,它接管控制台并允许交互输入。因此,当文件更改未在容器中的 Docker 卷绑定挂载上注册时(Windows 很愚蠢),我可以执行诸如重新启动服务器之类的操作。

问题

我想让容器在启动时运行此命令。当我这样做时,我就失去了发送命令的能力,因为 Docker 不传递命令。

容器运行Vite服务器

然后我制作了一个运行的脚本pnpm run dev &;我以为我可以获取 Vite 服务器的进程 ID,然后使用 发送输入到该文件描述符echo "h" > /proc/17/fd/0,但什么也没发生。我还尝试了 PID 33。我认为我将输入发送到了错误的位置。但是我怎样才能找到正确的文件描述符(如果有的话)。

PS输出到容器中

PID   USER     TIME  COMMAND
    1 root      0:00 node /usr/local/bin/pnpm run dev
   17 root      0:00 node /root/task-01/node_modules/.bin/../vite/bin/vite.js --host 0.0.0.0 --port 3000
   33 root      0:00 /root/task-01/node_modules/.pnpm/@[email protected]/node_modules/@esbuild/linux-x64/bin/esbuild --service=0.20.
   39 root      0:00 sh
   47 root      0:00 ps

免责声明:现在应该使用 Docker watch 来解决这个问题,因为我将不再需要在文件更改时手动重新启动服务器;但我想看看它是否可能,因为这对于其他情况有用。另外,不要因为我以 root 身份运行而感到羞耻,我通常不会这样做。

相关内容