查看程序在運行過程中使用到的文件


查看程序在運行過程中使用到的文件

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)

===

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

地勢坤,君子以厚德載物。

===


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM