zsh:我需要关闭文件描述符吗?
zsh: Do I need to close file descriptors?
我使用以下代码将某些内容输出到标准输出,并将其通过管道传输到程序:
function example() {
local fd1
{
exec {fd1}>&1
{ echo hi >&$fd1 } | true
} always { exec {fd1}>&- }
}
我想知道我是否可以安全地放弃 always { exec {fd1}>&- }
。 fd1
在函数完成后超出范围。
您需要保留 always { exec {fd1}>&- }
。如果你摆脱它,包含文件描述符的变量将超出范围,但文件描述符不会关闭,导致泄漏。您可以通过在 运行 函数之前和之后执行 ls -l /proc/$$/fd
来查看这一点,而无需该行。该函数的每个 运行 都会将另一个 FD 永久添加到该列表中。最终,您将 运行 文件描述符不足,并且无法打开任何新的文件描述符,这会破坏一切。
我使用以下代码将某些内容输出到标准输出,并将其通过管道传输到程序:
function example() {
local fd1
{
exec {fd1}>&1
{ echo hi >&$fd1 } | true
} always { exec {fd1}>&- }
}
我想知道我是否可以安全地放弃 always { exec {fd1}>&- }
。 fd1
在函数完成后超出范围。
您需要保留 always { exec {fd1}>&- }
。如果你摆脱它,包含文件描述符的变量将超出范围,但文件描述符不会关闭,导致泄漏。您可以通过在 运行 函数之前和之后执行 ls -l /proc/$$/fd
来查看这一点,而无需该行。该函数的每个 运行 都会将另一个 FD 永久添加到该列表中。最终,您将 运行 文件描述符不足,并且无法打开任何新的文件描述符,这会破坏一切。