查看程序在运行过程中使用到的文件

查看程序在运行过程中使用到的文件

查看程序在运行过程中使用到的文件

1 场景

试想这个场景

  • 写了一个脚本在运行
  • 脚本运行时间需要很长,并且你不能停下脚本(会有中断问题)
  • 这时候你想知道自己的脚本进程在处理什么文件,在做什么事情,该怎么办呢?

2 想知道进程在读写什么文件

首先 使用 ps aux 或者 ps ef 查看自己的进程 id

然后到 /proc/ 目录中下查看相应进程的进程运行数据

ps aux 数据

wudanya+  3166  0.0  0.0 107956   616 ?        S    22:04   0:00 sleep 180
wudanya+  3189  0.0  0.0 107956   616 pts/3    S+   22:06   0:00 sleep 1000000
wudanya+  3191  0.0  0.0 112728   972 pts/5    R+   22:06   0:00 grep --color=auto sleep

第二列就是每个进程的 pid ,在系统中是唯一的

查看 /proc/[pid]/fd 目录

2020-09-10_00-02-12_screenshot_副本.jpg

如图, 可以看到,进程打开了 4 个文件描述符

其中 0、1、2 分别代表 标准输入、输出、错误(规定)

25 代表的是一个虚拟终端

3 打开的是一个文件

这样就可以知道你打开的是什么文件了

是不是很简单呢

3 我怎么知道文件正在读取还是写入呢

这还用问,当然是看代码了

开个玩笑

咱们这次是说不用看代码就可以看出来在写入什么文件,在读取什么文件

3.1 lsof -p pid

[wudanyang@bogon ~]$ lsof -p 3352
COMMAND  PID      USER   FD      TYPE DEVICE  SIZE/OFF     NODE NAME
tail    3352 wudanyang  cwd       DIR  253,0      4096  4731473 /home/wudanyang
tail    3352 wudanyang  rtd       DIR  253,0       240       64 /
tail    3352 wudanyang  txt       REG  253,0     66824 12829983 /usr/bin/tail
tail    3352 wudanyang  mem       REG  253,0 106075056 12587626 /usr/lib/locale/locale-archive
tail    3352 wudanyang  mem       REG  253,0   2156160    44517 /usr/lib64/libc-2.17.so
tail    3352 wudanyang  mem       REG  253,0    163400    44510 /usr/lib64/ld-2.17.so
tail    3352 wudanyang    0u      CHR  136,3       0t0        6 /dev/pts/3
tail    3352 wudanyang    1u      CHR  136,3       0t0        6 /dev/pts/3
tail    3352 wudanyang    2u      CHR  136,3       0t0        6 /dev/pts/3
tail    3352 wudanyang    3r      REG  253,0         0  5171247 /home/wudanyang/a
tail    3352 wudanyang    4r  a_inode   0,10         0     5338 inotify
tail    3352 wudanyang   25u      CHR    5,2       0t0     7061 /dev/ptmx

前三列可以不用管,第四列是打开的描述符,可以看到

FD:

u 读/写
r 只读
w 只写
W 获得写锁

OK,搞定,可以看到咱们程序打开了一个 /home/wudanyang/a 文件只读描述符

3.2 使用 strace -p pid 看一下系统调用

2020-09-10_00-03-55_screenshot.png

通过系统调用查看一下当前正在执行的系统调用,也可以看到是 读还是写。上图中是一个读取的系统调用,参数是文件描述符 4

4 总结

  • 日常工作中会经常遇到这种需求,总结一下
  • /proc/[pid]/ 不止有 fd ,可以继续深入了解一下

===

作者: 吴丹阳 https://www.cnblogs.com/wudanyang

更新时间: 2020-09-10 Thu 00:09

Emacs 28.0.50 (Org mode 9.3.7)

===

天行健,君子以自强不息。

地势坤,君子以厚德载物。

===

原文地址:https://www.cnblogs.com/wudanyang/p/13643060.html