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] 我真的不认为它们的失控创造是有意的,毕竟没有任何递归发生.我真的不明白如何在循环中添加一些东西来解决问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |