加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash文件描述符泄漏

发布时间:2020-12-15 21:27:43 所属栏目:安全 来源:网络整理
导读:运行以下代码时,我收到文件描述符泄漏: 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)"
运行以下代码时,我收到文件描述符泄漏:

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 %sn" $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来修复的,但它主要通过使用(退出0)来修复但是我得到“bash:echo:写错误:中断系统调用”错误使用“修复”或者如果我使用/ bin / pwd而不是内置的密码.

它似乎也是特定的阅读.我试过grep. < <(pwd)> / dev / null并且它正常工作.当我试着读的时候;做:;完成< <(pwd) 以下形式的额外文件描述符:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读