gpt4 book ai didi

Bash 文件描述符泄漏

转载 作者:行者123 更新时间:2023-11-29 09:04:26 30 4
gpt4 key购买 nike

运行以下代码时出现文件描述符泄漏:

function get_fd_count() {
local fds
cd /proc/$$/fd; fds=( * ) # avoid a StackOverflow source colorizer bug
echo "${#fds[@]}"
}

function fd_leak_func() {
while : ; do
echo ">> Current FDs: $(get_fd_count)"
read retval new_state < <(set +e; new_state=$(echo foo); retval=$?; printf "%d %s\n" $retval $new_state)
done
}

fd_leak_func

在 3.2.25 和 4.0.28 上测试。

只有当循环发生在函数内时才会发生这种情况;每次我们返回顶层上下文时,额外的文件描述符都会关闭。

这是有意为之的行为吗?更重要的是,是否有解决方法?


跟进:在向 bash-bug 邮件列表报告后,这被确认为一个错误。 Chet 指出下一个版本中将包含一个修复程序(截至 2010 年 4 月 17 日)。

最佳答案

这是一个简化的例子:

$ fd_leaker() { while :; do read a < <(pwd); c=(/proc/$$/fd/*); c=${#c[@]}; echo $c; done; } 
$ fd_leaker

这个不是用/bin/true修复的但它主要是通过使用 (exit 0) 修复的但是我得到了“bash: echo: write error: Interrupted system call”错误使用那个“修复”或者如果我使用/bin/pwd而不是内置的 pwd .

它似乎也特定于read .我试过 grep . < <(pwd) > /dev/null它工作正常。当我尝试 while read a; do :; done < <( pwd)

额外的文件描述符形式为:

lr-x------ 1 user user 64 2010-04-15 19:26 39 -> pipe:[8357879]

我真的不认为它们的失控创建是有意的,毕竟没有任何递归发生。我真的不明白在循环中添加一些东西应该如何解决问题。

关于Bash 文件描述符泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649240/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com