Câu trả lời:
Hãy thử watchlệnh:
watch -n 10 ls -l /proc/$$/fd
Đồng hồ là tốt đẹp.
Bạn có thể sử dụng một trường học cũ trong khi vòng lặp:
while :
do
ls -l /proc/$$/fd
sleep 10
done
watchnằm trong gói Procps trên các hệ thống dựa trên debian và vòng / phút của Procps trên các hệ thống có nguồn gốc RedHat.
Nếu bạn muốn xem từng tệp khi nó đang được mở, bạn có thể lọc nó với strace. Ví dụ:
strace -p _pid_of_app_ -e trace=open,close
-yvà -fnếu bạn đang cố gắng gỡ lỗi một cái gì đó đang chạy trong một vỏ. Chỉ cần vượt qua PID shell và -fsẽ theo bất kỳ nhánh nào.
Bạn có thể kết hợp lsofvà watch.
Ví dụ watch "lsof -p 1234"sẽ cung cấp cho bạn một danh sách tất cả các tệp đang mở của pid 1234 cứ sau 2 giây. Bạn có thể thay đổi một số thông số để đáp ứng nhu cầu của bạn.
-rtùy chọn cho lsof. Do đó, tôi thường watchthực hiện lsofhai giây một lần.
Tôi đã tạo một tệp bash trong đó tôi đang viết đầu ra của lệnh thành một tệp. Tập tin được tạo ra vào ngày hiện tại. Ở đây tôi đang đếm số lượng các tập tin đang mở.
#!/bin/bash
while :
do
cd /proc/<PID>/fd
today=$(date +"%m-%d-%Y")
filename="/tmp/${today}.txt"
ls -l | wc -l >> "${filename}"
sleep 10
done