Saya mencari fungsi command line atau fungsi c yang akan memberi tahu saya jika file terbuka / sedang digunakan oleh sesuatu.
lsof
dan fuser
jangan katakan ini, tetapi mereka memberikan banyak info lain yang menghasilkan 300ms dalam beberapa situasi (seperti ketika saya menggunakan kode ini pada MAC OS X, saya devving untuk Linux dan OS X) (saya punya windows solusi yang membutuhkan 5ms jadi saya mencoba untuk menemukan sesuatu di Unix yang juga sangat cepat, dan hanya mengembalikan benar atau salah jika file sedang digunakan)
command-line
files
Noitidart
sumber
sumber
Jawaban:
Jika Anda menggunakan ini sebagai kunci, itu tidak akan berfungsi sebagai keduanya
lsof
ataufuser
mencegah kondisi balapan.Proses dasar yang
lsof
dilakukan adalah menjaring seluruh proses/proc/*/fs
mencari deskriptor file terbuka. Ini akan memakan waktu, apa pun yang Anda lakukan.Anda dapat melakukannya sendiri, tetapi sepertinya tidak akan lebih cepat karena Anda harus memeriksa setiap proses terbuka pada sistem.
Jika apa yang Anda lakukan adalah waktu yang kritis, cari cara lain untuk melakukannya.
/proc/<PID>/fs
melihat apakah file Anda sedang terbuka atau tidak. Melihat hanya satu proses deskriptor file yang terbuka akan jauh lebih cepat daripada memetakan semuanya.Anda memberi lebih banyak informasi dalam komentar yang ingin Anda tentukan apakah Firefox berjalan pada sistem yang diberikan. Cara terbaik untuk melakukan ini adalah mencari file kunci Firefox. Ini disimpan di lokasi default yang ditentukan pada wiki Mozilla.
Misalnya, di linux, minta program Anda melakukan hal berikut:
~/.mozilla/firefox/
direktori..default
. (Saya pikir semua profil diakhiri dengan.default
, jika tidak hanya merangkak ke setiap direktori.)lock
atau.parentlock
. Jika Anda melihat satu atau kedua file, Firefox terbuka.Algoritma ini seharusnya mengeksekusi lebih cepat daripada apa yang Anda lakukan pada windows saat ini.
sumber
ps aux firefox
. Ambil PID tersebut dan cari di sistem/proc/
file.ps aux firefox
. Yah situasi tepatnya saya adalah: Saya memiliki path ke file. Terkunci jika firefox sedang berjalan. Saya ingin melihat apakah terkunci atau tidak memberi tahu apakah firefox sedang berjalan.TL; DR
Dalam salah satu komentar Anda, Anda menyatakan:
Pertanyaan awal Anda tentang file penguncian sepertinya jauh ketika ada cara yang lebih mudah untuk mengetahui apakah Firefox berjalan untuk pengguna tertentu, dan untuk memeriksa status prosesnya.
Memeriksa Status Proses
Cara yang lebih masuk akal untuk menemukan PID dari proses yang diberikan adalah dengan menggunakan pgrep dari paket procps . Sebagai contoh:
Anda kemudian dapat memeriksa status PID dengan ps :
atau hanya mendapatkan bendera negara tanpa cacat lainnya:
Satu sistem saya, one-liner di atas secara konsisten hanya membutuhkan 1,4 milidetik untuk menyelesaikannya. Jarak tempuh Anda mungkin beragam.
Kode Status Proses
Bagian PROSES STATE CODES dari ps (1) merinci apa arti berbagai bendera negara. Pada Ubuntu 14.04 halaman manual mengatakan:
sumber
~/.mozilla/firefox/*/lock
. Anda kemudian dapat mengidentifikasi sesi dengan melihat nama direktori induk dari setiap file kunci. Pada platform lain ini tidak berfungsi. Obrolan kami membahas lebih lanjut tentang cara membuatnya bekerja di mac (yang agak tidak relevan untuk ubuntu, tetapi begitulah). Agar adil, ia benar-benar harus memperbarui pertanyaan agar lebih spesifik. : P