Lihat proses apa yang menggunakan file di Mac OS X

93

Saya ingin dapat melacak file dan melihat proses mana yang menyentuh file itu. Apakah itu mungkin? Saya tahu bahwa saya dapat melihat daftar proses terbuka di monitor aktivitas tetapi saya pikir itu terjadi dengan cepat bagi saya untuk melihatnya. Alasannya adalah saya menggunakan kerangka kerja dan saya pikir versi sistem kerangka kerja yang digunakan, bukan versi debug, dan saya ingin melihat proses mana yang menyentuhnya.

JPC
sumber
1
ini adalah pertanyaan penggunaan yang lebih baik ditanyakan pada Pengguna Super
Michael Dautermann
CATATAN: ^^^ ADALAH SANGAT RELEVAN, pertanyaan serupa - FYI ;-)
Brad Parks

Jawaban:

90

lsof akan menampilkan file-file yang terbuka, tetapi ini bisa menjadi sedikit canggung untuk sentuhan sesaat (misalnya, jika file tidak terbuka saat lsof dijalankan, itu tidak muncul).

Saya pikir taruhan terbaik Anda adalah fseventer.app fernLightning . Ini adalah "nagware", dan memungkinkan Anda untuk menonton (secara grafis) API fsevents secara real-time.

Shaun
sumber
39
lsof | grep myfilenamebekerja untuk saya. Saya memiliki file PDF di Sampah yang diklaim oleh sistem sedang digunakan. Anehnya lsofmengklaim itu sedang digunakan oleh Previewtetapi Previewtampaknya tidak berjalan (misalnya ketika saya memerintahkan-tab melalui aplikasi yang sedang berjalan) tetapi Activity Monitormenunjukkannya sedang berjalan. Pratinjau Bodoh.
Dave Sag
Ini sempurna untuk file sementara (yaitu, file yang tidak tetap terbuka tetapi dan hanya disentuh saat menyimpan).
Jeronimo Colon III
Saya mengalami masalah yang sama hari ini dengan file di Sampah saya ditahan oleh proses Pratinjau zombie. Membuka Pratinjau dan keluar lagi memecahkan masalah bagi saya. Saya pikir Pratinjau secara teratur menyimpan file meskipun telah berhenti. Saya sering membuka gambar dari Evernote di Pratinjau untuk memotongnya, dan sering kali - lebih sering daripada tidak - bahkan setelah saya keluar dari Pratinjau, Evernote mengatakan bahwa gambar tersebut masih terbuka di aplikasi lain.
Vihung
Ini sepertinya mirip dengan masalah yang saya alami saat ini - masih belum ada solusi. Saya mengunduh file menggunakan Chrome, lalu memindahkannya menggunakan Finder ke folder lain. Muncul abu-abu, jadi saya menggunakan lsof untuk mencari tahu siapa yang membuka file: Finder. Saya mencoba memaksa keluar dari Finder (yang secara otomatis meluncurkannya kembali). Itu tidak berhasil. Saya mencoba menutup laptop saya, mengira itu akan membuat semuanya tertidur dan semoga menyelesaikan masalah. Itu juga tidak berhasil. lsof terus menampilkan Finder sebagai pelakunya, dan terus muncul abu-abu di UI.
Victor Engel
1
Menariknya, menutup jendela pencari sepertinya menyelesaikan masalah. Namun, jika saya membuka jendela pencari baru dan menavigasi ke folder yang sama, masalahnya tetap ada. Saya menyelesaikan masalah dengan menyeret file yang salah ke tempat sampah (menghasilkan peringatan bahwa mungkin ada efek yang tidak diinginkan dalam program yang membuka file), lalu menyalin kembali file tersebut.
Victor Engel
95

Sederhana saja: sudo fs_usage | grep [path_to_file]

spaceboy.cz
sumber
10
Sejauh ini, inilah jawaban terbaik di sini.
NuSkooler
fs_usage harus dijalankan sebagai root ... ini bukan solusi terbaik.
bontoJR
Ini menunjukkan acara fs? Jika suatu proses memiliki file yang terbuka tetapi tidak melakukan apa pun dengannya, tidak ada yang muncul di sini. Atau setidaknya seperti pengalaman saya. sudo fs_usage | grep musiclibrarytidak menunjukkan apa-apa selain sudo lsof | grep musiclibrarymenunjukkan 3 proses mengakses file database perpustakaan musik saya.
gman
43

Tapi saya menghabiskan 2 menit Googling dan menemukan jawaban Anda di sini .

$ lsof | grep [terserah]

Di mana [apa pun] diganti dengan nama file yang Anda cari. Dengan ini, Anda dapat melihat program mana yang dengan susah payah menahan file Anda yang akan dibuang. Setelah Anda keluar dari program itu, sampah Anda akan kosong.

Michael Dautermann
sumber
1
Masalahnya adalah saya harus mencoba dan mengetik dengan sangat cepat. mungkin hanya sementara
JPC
13
lsof -r menempatkan lsof dalam mode pengulangan
stoutyhk
Masuk akal untuk melakukan grep untuk berjaga-jaga jika file telah dirilis.
Ray Hunter
16

Cara yang lebih cepat adalah:

$ lsof [path_to_file]

Solusi ini tidak memerlukan kata sandi root dan memberi Anda kembali hasil berikut, jelas,:

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
bontoJR
sumber
15

Pilihan lainnya adalah Sloth . Ini adalah GUI open source gratis untuk LSOF yang telah disebutkan orang lain.

pawai
sumber
1
Wow, ini alat yang sangat hebat, terima kasih telah berbagi! Ini bekerja sempurna untuk menemukan proses yang saya lupa.
RayB
2
Saya cenderung lebih suka solusi baris perintah karena lebih portabel, tetapi saya harus mengakui ini adalah alat yang sangat bagus! Terima kasih untuk sarannya.
Formulir