giám sát các tệp quá trình mở trên linux (thời gian thực)


10

Các tập tin được mở bởi quá trình XYZ có thể được tìm thấy bằng lệnh

ls -l /proc/PID/fd

Có cách nào có thể được thực hiện theo cách tương tác hơn như tailtự động làm mới mỗi x giây không?

Câu trả lời:


15

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.


1
giấc ngủ có thể được sử dụng như điều kiện trong vòng lặp while, vì vậy ví dụ của bạn có thể được viết thanh lịch hơn như thế này: trong khi ngủ 10; làm ls -l / Proc / $$ / fd; xong
ipozgaj

7

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

2
Đây thực sự là câu trả lời tốt nhất. Tôi muốn giới thiệu các cờ -y-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.
Aea

4

Bạn có thể kết hợp lsofwatch.

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.


nó sẽ không đưa ra danh sách MERYI 2 giây. Tham số -r 2 bị thiếu để làm việc! -p là PID. Câu trả lời là rất kém!
mahatmanich

2
Đẹp, đã không nhận thức được các -rtùy chọn cho lsof. Do đó, tôi thường watchthực hiện lsofhai giây một lần.
Christian

0

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.