Perintah lsof Dijelaskan untuk Pengguna Mac

Kuasai perintah lsof untuk mengetahui proses mana yang membuka file di Mac-mu. Panduan untuk developer dan pengguna mahir.

Drive eksternalmu tidak mau keluar. macOS memberimu pesan yang bikin gemas dan samar bahwa “satu atau beberapa program mungkin sedang menggunakannya.” Program yang mana? macOS tidak bilang. Di sinilah lsof berperan.

Namanya kependekan dari “list open files,” dan persis itulah yang dilakukannya. Pada sistem berbasis Unix seperti macOS, hampir segala sesuatu diperlakukan sebagai file, termasuk koneksi jaringan, perangkat, dan volume disk. Saat kamu tidak bisa mengeluarkan drive, lsof memberitahumu persis proses mana yang menyanderanya.

Sintaks dasar

Cara paling sederhana memakai lsof untuk masalah pengeluaran adalah:

lsof /Volumes/YourDriveName

Ganti “YourDriveName” dengan nama drive-mu yang sebenarnya. Jika namanya mengandung spasi, bungkus seluruh jalur dengan tanda kutip:

lsof "/Volumes/My Backup Drive"

Ini mengembalikan daftar setiap proses yang punya handle file terbuka di volume itu. Tiap baris menampilkan nama proses, ID-nya (PID), pengguna yang menjalankannya, dan informasi tentang file spesifik yang sedang diakses.

Membaca hasilnya

Hasil lsof yang umum tampak seperti ini:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...
Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External

Kolom yang paling penting adalah COMMAND (nama proses), PID (ID proses yang kamu pakai untuk menghentikannya), dan NAME (jalur file sebenarnya yang sedang diakses).

Kolom FD menunjukkan bagaimana file itu digunakan. Angka yang diikuti “r” berarti akses baca, “w” berarti tulis, dan “u” berarti baca sekaligus tulis. Jika kamu melihat “cwd”, proses itu menjadikan lokasi tersebut sebagai direktori kerjanya saat ini. Ini terjadi saat kamu punya jendela Terminal yang terbuka pada folder di drive.

Mencari tahu apa yang memblokir drive-mu

Untuk masalah pengeluaran khususnya, biasanya kamu hanya perlu tahu nama proses mana saja yang muncul. Biang kerok yang umum antara lain mds dan mds_stores (pengindeksan Spotlight), Finder, QuickLookUIService (pembuatan thumbnail), dan fsevents (pemantau sistem file).

Jika hasilnya banyak dan kamu ingin mempersempit, kamu bisa pakai grep:

lsof /Volumes/YourDriveName | grep -v "^COMMAND"

Ini menghapus baris header sehingga kamu hanya melihat proses sungguhan. Jika kamu hanya mau nama-nama proses yang unik:

lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u

Flag yang berguna

Flag -c memfilter berdasarkan nama perintah. Jika kamu menduga Spotlight masalahnya:

lsof -c mds /Volumes/YourDriveName

Ini hanya menampilkan proses yang namanya diawali “mds.”

Flag +D mendaftar secara rekursif semua file terbuka dalam sebuah direktori:

lsof +D /Volumes/YourDriveName

Ini lebih menyeluruh ketimbang sintaks dasar tapi bisa lambat pada drive besar dengan banyak file.

Untuk melihat proses mana yang dibuka oleh pengguna tertentu di drive:

lsof -u yourusername /Volumes/YourDriveName

Memakai lsof tanpa sudo

Secara bawaan, lsof hanya menampilkan proses milik akun penggunamu. Proses sistem yang dijalankan root (seperti mds milik Spotlight) tidak akan muncul kecuali kamu menjalankan lsof dengan sudo:

sudo lsof /Volumes/YourDriveName

Kamu perlu memasukkan kata sandimu. Untuk memecahkan masalah pengeluaran, memakai sudo hampir selalu diperlukan karena proses sistem sering kali menjadi penyumbatnya.

Menghentikan proses yang memblokir

Begitu kamu tahu ID proses (PID) dari hasil lsof, kamu bisa menghentikannya:

kill 1234

Ganti 1234 dengan PID yang sebenarnya. Jika itu tidak berhasil, kamu bisa memaksanya:

kill -9 1234

Hati-hati dengan ini. Menghentikan proses sistem seperti mds bisa menimbulkan masalah sementara. Prosesnya biasanya akan menyala ulang otomatis, tapi kamu mungkin melihat Spotlight berperilaku aneh sebentar. Menghentikan aplikasi seperti Finder umumnya aman; macOS akan menjalankan ulang Finder secara otomatis.

Untuk aplikasi milikmu (seperti jendela Terminal dengan shell yang berada di direktori drive), lebih bersih jika kamu cukup menutup aplikasinya secara normal atau berpindah keluar dari drive sebelum mencoba mengeluarkannya.

Skenario umum

Terminal dengan direktori aktif di drive: Jika kamu sudah cd ke folder di drive eksternalmu, proses shell itu akan menahan drive tetap terbuka. Entah cd ke tempat lain (cd ~) atau tutup jendela Terminal itu.

Jendela Finder: Jika Finder punya jendela yang terbuka pada drive, atau bahkan jika drive itu terpilih di bilah samping, ia bisa menghalangi pengeluaran. Tutup setiap jendela Finder yang menampilkan isi drive.

Pengindeksan Spotlight: Proses mds, mds_stores, dan mdworker mengindeks drive baru secara otomatis. Kamu bisa menunggunya selesai, menonaktifkan pengindeksan dengan sudo mdutil -i off /Volumes/YourDriveName, atau menghentikannya langsung.

Aplikasi latar belakang dengan file terbuka: Beberapa aplikasi tetap mereferensikan file terbaru bahkan setelah kamu menutup dokumennya. Aplikasi kreatif seperti Photoshop atau editor video adalah pelanggar yang umum. Keluar dari aplikasi sepenuhnya biasanya melepas file-filenya.

Di luar baris perintah

Jika kamu tidak nyaman dengan Terminal atau tidak mau memecahkan teka-teki hasil lsof setiap kali perlu mencabut drive, ada opsi grafis.

Monitor Aktivitas bisa menunjukkan file terbuka untuk proses tertentu, tapi kamu harus sudah tahu lebih dulu proses mana yang mau diperiksa. Ia tidak menjawab dengan mudah pertanyaan “apa yang memakai drive ini?”

Ejecta dibuat khusus untuk masalah ini. Ejecta menampilkan drive yang terhubung, mengidentifikasi proses mana yang memblokir tiap drive, dan membiarkanmu menutup proses itu dengan sekali klik. Pada dasarnya ia adalah pembungkus grafis untuk kerja detektif yang dituntut lsof, ditambah kecerdasan untuk menangani proses sistem dengan aman.

Baris perintah memang ampuh bagi mereka yang menyukainya, tapi seharusnya tidak wajib untuk sesuatu sesederhana mencabut drive.

Jika kamu lebih suka tidak menggunakan Terminal setiap saat, Ejecta menunjukkan persis proses mana yang memblokir drive kamu — dan memungkinkan kamu keluar darinya dengan satu klik, langsung dari bilah menu.

Beli Sekarang — $9.99