ดูกระบวนการที่ใช้ไฟล์ใน Mac OS X


95

ฉันต้องการติดตามไฟล์และดูว่ากระบวนการใดที่สัมผัสไฟล์นั้น เป็นไปได้หรือไม่ ฉันรู้ว่าฉันสามารถดูรายการของกระบวนการที่เปิดอยู่ในตัวตรวจสอบกิจกรรม แต่ฉันคิดว่ามันเกิดขึ้นอย่างรวดเร็วเพื่อให้ฉันเห็น เหตุผลนี้คือฉันใช้เฟรมเวิร์กและฉันคิดว่าเวอร์ชันระบบของเฟรมเวิร์กกำลังถูกใช้แทนเวอร์ชันดีบักและฉันต้องการดูว่ากระบวนการใดสัมผัสได้


1
นี่เป็นคำถามการใช้งานที่ถามกันดีกว่าในSuper User
Michael Dautermann


2
หมายเหตุ: ^^^ เป็นคำถามที่เกี่ยวข้องมาก - FYI ;-)
Brad Parks

คำตอบ:


90

lsof จะแสดงรายการไฟล์ที่เปิดอยู่ แต่อาจเป็นเรื่องที่น่าอึดอัดสำหรับการสัมผัสชั่วขณะ (เช่นหากไฟล์ไม่เปิดเมื่อ lsof ทำงานไฟล์จะไม่แสดง)

ผมคิดว่าทางออกที่ดีที่สุดของคุณจะเป็น fernLightning ของfseventer.app มันคือ "nagware" และให้คุณดู (แบบกราฟิก) fsevents API แบบเรียลไทม์


39
lsof | grep myfilenameทำงานให้ฉัน ฉันมีไฟล์ PDF ในถังขยะที่ระบบอ้างว่าใช้งานอยู่ lsofอ้างว่ามีการใช้งานอย่างแปลกประหลาดPreviewแต่Previewดูเหมือนจะไม่ทำงาน (เช่นเมื่อฉันสั่งแท็บผ่านแอพที่กำลังทำงานอยู่) แต่Activity Monitorแสดงว่ามันกำลังทำงานอยู่ ดูตัวอย่างโง่ ๆ
Dave Sag

เหมาะสำหรับไฟล์ชั่วคราว (เช่นไฟล์ที่ไม่ได้เปิดค้างไว้ แต่แตะต้องขณะบันทึกเท่านั้น)
Jeronimo Colon III

วันนี้ฉันมีปัญหาคล้าย ๆ กันกับไฟล์ในถังขยะที่ถูกจัดการโดยกระบวนการดูตัวอย่างซอมบี้ การเปิดดูตัวอย่างและออกอีกครั้งช่วยแก้ปัญหาให้ฉันได้ ฉันคิดว่าการแสดงตัวอย่างมักจะเก็บไฟล์ไว้แม้ว่ามันจะหยุด ฉันมักจะเปิดรูปภาพในรูปแบบ Evernote ในการแสดงตัวอย่างเพื่อที่จะครอบตัดและบ่อยครั้ง - บ่อยกว่าไม่ได้ - แม้ว่าฉันจะออกจากการแสดงตัวอย่างไปแล้ว แต่ Evernote ก็เกิดสงครามที่รูปภาพยังคงเปิดอยู่ในแอปพลิเคชันอื่น
Vihung

ดูเหมือนว่าจะคล้ายกับปัญหาที่ฉันพบในตอนนี้ - ยังไม่มีทางแก้ไข ฉันดาวน์โหลดไฟล์โดยใช้ Chrome จากนั้นย้ายไฟล์โดยใช้ Finder ไปยังโฟลเดอร์อื่น มันแสดงเป็นสีเทาฉันจึงใช้ lsof เพื่อค้นหาว่าใครเปิดไฟล์อยู่: Finder ฉันพยายามบังคับให้ออกจาก Finder (ซึ่งจะเปิดใช้งานใหม่โดยอัตโนมัติ) นั่นไม่ได้ผล ฉันลองปิดแล็ปท็อปโดยคิดว่าจะทำให้ทุกอย่างเข้าสู่โหมดสลีปและหวังว่าจะสามารถแก้ปัญหาได้ ไม่ได้ผลเช่นกัน lsof ยังคงแสดง Finder เป็นผู้ร้ายและยังคงแสดงเป็นสีเทาใน UI
วิคเตอร์เอนเกล

1
ที่น่าสนใจคือการปิดหน้าต่างตัวค้นหาดูเหมือนจะช่วยแก้ปัญหาได้ อย่างไรก็ตามหากฉันเปิดหน้าต่างตัวค้นหาใหม่และไปที่โฟลเดอร์เดียวกันปัญหาก็ยังคงอยู่ ฉันแก้ไขปัญหาโดยการลากไฟล์ที่ผิดพลาดไปที่ถังขยะ (สร้างคำเตือนว่าอาจมีผลกระทบที่ไม่ดีในโปรแกรมที่เปิดไฟล์) จากนั้นคัดลอกไฟล์อีกครั้ง
Victor Engel

97

ง่ายมาก: sudo fs_usage | grep [path_to_file]


11
นี่คือคำตอบที่ดีที่สุดที่นี่
NuSkooler

1
fs_usage ควรรันเป็นรูท ... ไม่ใช่ทางออกที่ดีที่สุด
bontoJR

นี่แสดงเหตุการณ์ fs? หากกระบวนการมีไฟล์เปิดอยู่ แต่ไม่ได้ดำเนินการใด ๆ โดยไม่มีสิ่งใดปรากฏขึ้น หรืออย่างน้อยก็ดูเหมือนจะเป็นประสบการณ์ของฉัน sudo fs_usage | grep musiclibraryไม่แสดงอะไรเลยนอกจากsudo lsof | grep musiclibraryแสดง 3 กระบวนการที่เข้าถึงไฟล์ฐานข้อมูล musiclibrary ของฉัน
gman

43

แต่ผมใช้เวลา 2 นาที Googling และพบว่าคำตอบของคุณที่นี่

$ lsof | grep [อะไรก็ได้]

โดยที่ [อะไรก็ตาม] จะถูกแทนที่ด้วยชื่อไฟล์ที่คุณกำลังมองหา ด้วยวิธีนี้คุณจะเห็นได้ว่าโปรแกรมใดที่เก็บไฟล์ที่กำลังจะถูกทิ้งในถังขยะ เมื่อคุณออกจากโปรแกรมนั้นถังขยะของคุณจะว่างเปล่า


1
ปัญหาคือต้องลองพิมพ์ lsof เร็วจริงๆ อาจเป็นเพียงชั่วคราว
JPC

13
lsof -r ทำให้ lsof อยู่ในโหมดเล่นซ้ำ
stoutyhk

สมเหตุสมผลที่จะ grep ในกรณีที่ไฟล์ถูกปล่อยออกมา
Ray Hunter

16

วิธีที่เร็วกว่าคือ:

$ lsof [path_to_file]

โซลูชันนี้ไม่จำเป็นต้องใช้รหัสผ่าน root และให้ผลลัพธ์ที่ชัดเจนดังต่อไปนี้แก่คุณ:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg

15

ตัวเลือกหนึ่งคือเฉื่อยชา เป็น GUI โอเพ่นซอร์สฟรีสำหรับ LSOF ที่คนอื่นพูดถึง


1
ว้าวนี่เป็นเครื่องมือที่ยอดเยี่ยมจริงๆขอบคุณสำหรับการแบ่งปัน! มันทำงานได้อย่างสมบูรณ์แบบสำหรับการค้นหากระบวนการที่ฉันหลงติดตาม
RayB

2
ฉันมักจะชอบโซลูชันบรรทัดคำสั่งเพราะพกพาได้มากกว่า แต่ต้องยอมรับว่านี่เป็นเครื่องมือที่ดีมาก! ขอบคุณสำหรับคำแนะนำ
แบบ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.