You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过/proc文件描述符读取已打开文件?求脚本报错修复方法

问题分析与修复方法

你的脚本问题出在cat script.txt这个命令上——它会快速读取完文件内容,然后立即关闭文件描述符并退出进程。等你执行sleep 1后,目标进程已经终止,/proc文件系统中对应的PID目录已被清理,自然找不到/proc/$pid/fd/3,kill命令也会因为进程不存在报错。

要实现“保持文件打开状态”的需求,你需要让目标进程打开文件后持续运行,不立即退出。下面是修复后的脚本:

#!/bin/bash
echo "Hello, world!" > script.txt
# 启动一个保持文件打开的子进程:用exec绑定fd3到目标文件,然后挂起进程
bash -c 'exec 3< script.txt; sleep infinity' &
pid=$!
# 短暂等待确保文件描述符已成功打开
sleep 0.1
# 通过/proc读取目标进程的fd3
cat "/proc/$pid/fd/3"
# 终止子进程
kill $pid

关键说明:

  • exec 3< script.txt:在子bash进程中,将script.txt以只读方式绑定到文件描述符3,这个描述符会一直保持打开状态,直到进程终止。
  • sleep infinity:让子进程持续挂起,不会自动退出,确保进程和文件描述符始终存在,直到你手动kill它。
  • 不需要sleep 1这么久,sleep 0.1足够确保文件描述符完成绑定。

你也可以用其他方式实现类似效果,比如用tail -f script.txt &(tail会持续监控文件,保持fd打开),但上面的exec + sleep infinity方式更直接,能明确控制文件描述符的绑定逻辑。

内容的提问来源于stack exchange,提问作者Иван Мориков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:18:24