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

Linux下如何获知进程终止时STDIN的已读取位置?

Linux下查询可执行程序读取输入文件的位置

如果你的程序已经运行结束,或者处于运行状态,可通过以下几种工具和方法确定它读取到输入文件的哪个位置:

一、程序运行中实时查看偏移量

1. 利用/proc文件系统

这是最直接的实时监控方式:

  • 先获取程序的进程ID(PID):执行ps aux | grep <你的程序名>,从输出里找到对应的PID
  • 查看进程打开的文件描述符:ls -l /proc/<PID>/fd,找到对应输入文件的条目(如果程序通过标准输入读取,通常是0这个文件描述符)
  • 查看该文件描述符的详细信息:cat /proc/<PID>/fdinfo/<fd编号>,输出中的pos字段就是当前已经读取到的字节位置。

2. 使用lsof命令

  • 同样先拿到程序的PID,然后执行:lsof -p <PID> -o | grep <输入文件名>
  • 输出结果里的OFFSET列就是当前的读取偏移量(已读取的字节数)。

二、程序结束后回溯读取位置

如果程序已经退出,只能通过追踪系统调用的方式获取总读取量:

1. 用strace记录read调用

  • 重新运行程序时,用strace追踪所有read系统调用:strace -e read ./<你的程序名> < <输入文件名> 2>&1
  • 查看输出里的每一条read记录,其中返回值是本次读取的字节数,把所有返回值累加就是总读取的字节数。
  • 也可以用统计模式快速得到总读取量:strace -c -e read ./<你的程序名> < <输入文件名>,输出里的bytes列就是read调用的总字节数。

2. 间接验证剩余内容

拿到总读取字节数N后,你可以用tail查看输入文件中未被读取的部分,验证是否符合预期:

tail -c +$((N+1)) <输入文件名>

把这部分内容和后续测试用例的预期输出对比,就能确认程序是否读到了对应位置。

内容的提问来源于stack exchange,提问作者Jiashu Zou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:58:28