ตรวจสอบไฟล์กระบวนการเปิดบน linux (เรียลไทม์)


10

ไฟล์ที่เปิดโดยกระบวนการ XYZ สามารถพบได้ด้วยคำสั่ง

ls -l /proc/PID/fd

มีอยู่แล้วที่สามารถทำได้ในวิธีการโต้ตอบมากขึ้นเช่นtailการรีเฟรชอัตโนมัติทุก ๆ x วินาที?

คำตอบ:


15

ลองใช้watchคำสั่ง:

watch -n 10 ls -l /proc/$$/fd

ดูดี

คุณสามารถใช้โรงเรียนเก่าในขณะที่วง:

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watchอยู่ในแพ็คเกจprocpsบนระบบที่ใช้เดเบียนและprocpsรอบต่อนาทีบนระบบที่ได้รับจาก RedHat


1
ตัวเองนอนหลับสามารถใช้เป็นเงื่อนไขในขณะที่วงดังนั้นตัวอย่างของคุณสามารถเขียนได้อย่างหรูหรามากขึ้นเช่นนี้: ขณะนอนหลับ 10 ทำ ls -l / proc / $$ / fd; เสร็จแล้ว
ipozgaj

8

straceหากคุณต้องการที่จะเห็นแต่ละไฟล์ที่มันจะถูกเปิดคุณสามารถกรองด้วย ตัวอย่างเช่น:

strace -p _pid_of_app_ -e trace=open,close

2
นี้มันเป็นคำตอบที่ดีที่สุด ฉันจะแนะนำการตั้งค่าสถานะ-yและ-fถ้าคุณพยายามที่จะตรวจแก้จุดบกพร่องสิ่งที่ทำงานในเปลือก เพียงผ่านเชลล์ PID และ-fจะติดตามส้อมใด ๆ
Aea

4

คุณสามารถรวมlsofและwatch.

ตัวอย่างเช่นwatch "lsof -p 1234"จะให้รายชื่อไฟล์ที่เปิดทั้งหมดของ pid 1234 ทุก 2 วินาที คุณสามารถเปลี่ยนพารามิเตอร์บางอย่างเพื่อตอบสนองความต้องการของคุณ


มันจะไม่ให้รายการทุก 2 วินาที พารามิเตอร์ -r 2 หายไปเพื่อให้ใช้งานได้! -p คือ PID คำตอบนั้นแย่มาก!
mahatmanich

2
นีซ, ไม่ได้ตระหนักถึงการมีตัวเลือกสำหรับ-r lsofดังนั้นฉันใช้watchเพื่อดำเนินการlsofทุกสองวินาที
Christian

0

ฉันสร้างไฟล์ bash โดยที่ฉันกำลังเขียนเอาต์พุตของคำสั่งไปยังไฟล์ ไฟล์ถูกสร้างขึ้นตามวันที่ปัจจุบัน ที่นี่ฉันกำลังนับจำนวนไฟล์ที่เปิดอยู่

#!/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.