Câu trả lời:
Hãy thử watch
lệ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
watch
nằ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
-y
và -f
nế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à -f
sẽ theo bất kỳ nhánh nào.
Bạn có thể kết hợp lsof
và 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.
-r
tùy chọn cho lsof
. Do đó, tôi thường watch
thực hiện lsof
hai 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