GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menentukan proses apa yang membuka file di Linux?

Pada sebagian besar sistem Linux lsof NAME melakukan pekerjaan:

[email protected]:~$ lsof /home/fin
COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME
bash    21310  fin  cwd    DIR    8,1 4096 5054467 /home/fin
lsof    21320  fin  cwd    DIR    8,1 4096 5054467 /home/fin
lsof    21321  fin  cwd    DIR    8,1 4096 5054467 /home/fin
[email protected]:~$

Anda juga dapat menggunakan fuser untuk ini:

~> less .vimrc
# put in background
~> fuser .vimrc
.vimrc:              28135
~> ps 28135
  PID TTY      STAT   TIME COMMAND
28135 pts/36   T      0:00 less .vimrc

Membuka file bukanlah kunci karena, jika setiap proses harus memeriksa apakah file dibuka terlebih dahulu dan tidak melanjutkan jika dibuka atau membuat/membukanya jika tidak, maka dua proses dapat memeriksa dengan baik secara bersamaan, keduanya menemukan bahwa itu tidak terbuka, buat atau buka.

Untuk menggunakan file sebagai kunci, operasi check-and-lock harus merupakan operasi tunggal yang tidak dapat diinterupsi. Anda dapat mencapai ini dalam sistem file Unix dengan membuat file dengan mode read-only dan menghapusnya untuk membuka kunci. Jika file tersebut ada (dan hanya dapat dibaca), pembuatan file akan gagal, sehingga Anda mendapatkan check-and-lock dalam satu operasi atomik.

Jika proses penguncian Anda adalah skrip shell yang akan dijalankan sebagai daemon, Anda bisa mendapatkan efek ini dengan menggunakan umask , pengaturan per proses yang menyetel izin untuk membuat file baru:

oldumask=$(umask)
umask 222   # create files unwritable to owner too
if echo $$ > /var/lock/foo
then
    : locking succeeded
else
    : locking failed
fi
umask $oldumask
Ini juga menulis PID proses kepemilikan ke dalam file, yang menyelesaikan masalah Anda yang lain:cat /var/lock/foo Mengenai pertanyaan spesifik "Proses mana yang membuka file ini?", Ini dapat berguna ketika Anda ingin meng-unmount sistem file tetapi tidak bisa karena beberapa proses membuka file di dalamnya. Jika Anda tidak memiliki perintah tersebut, Anda dapat meminta /proc sebagai akar:

ls -l /proc/*/cwd | grep '/var/lock/foo$'

atau, sebagai pengguna fana:

ls -l /proc/*/cwd 2>/dev/null | grep '/var/lock/foo$'


Linux
  1. Bagaimana Cara Membuat, Mengekstrak, atau Membuka file RAR di Linux?

  2. Bagaimana cara mengetahui proses apa yang mengunci file di Linux?

  3. Bagaimana saya bisa memantau data pada port serial di Linux?

  1. Cara Menentukan Proses Yang Menulis ke Disk di Linux

  2. Bagaimana Saya Dapat Membuat File Dump dari Proses yang Berjalan di Linux?

  3. Bagaimana Anda menentukan jenis soket CPU yang dimiliki komputer linux?

  1. Apa itu NFS dan bagaimana cara menginstalnya di Linux

  2. Bagaimana saya bisa menghubungkan file di Linux?

  3. Bagaimana saya bisa membuat file tar multipart di Linux?