如何从 shell 关闭程序的标准输出?

如何从 shell 关闭程序的标准输出?

我的意思是不要将 stdout 重定向到 /dev/null ,而是在启动程序之前阻止 stdout ,因此例如我的所有内容write(1, "dd", 2);都会返回 -1 ,就好像我的设备中不存在 stdout 一样。

答案1

>&-您可以使用 stdout 或9>&-fd 9等重定向来关闭文件描述符。例如:

$ /bin/echo foo >&-
/bin/echo: write error: Bad file descriptor

请注意,标准说:

如果在成功调用 exec 系列函数之一后文件描述符 0、1 或 2 将被关闭,则实现可能会在新的进程映像中为文件描述符打开一个未指定的文件。

因此它可能不会在所有系统中保持关闭状态。不过,我在 Linux 和 Mac 上确实遇到了 bad fd 错误。

当然,许多程序可能会期望 fds 0、1 和 2 引用打开的文件,如果情况并非如此,它们可能会出现错误行为。通常,当新打开的文件被放入其中之一(因为系统调用使用最低的空闲 fd)并被不相关的东西意外使用时,就会发生这种情况。

相关内容