Untuk apa file pid dan kunci?


75

Saya sering melihat bahwa program menentukan file pid dan kunci. Dan saya tidak yakin apa yang mereka lakukan.

Misalnya, saat mengompilasi nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Adakah yang bisa menjelaskan hal ini?

Jawaban:


86

file pid ditulis oleh beberapa program untuk merekam ID proses mereka saat mereka mulai. Ini memiliki beberapa tujuan:

  • Ini adalah sinyal bagi proses lain dan pengguna sistem bahwa program tertentu sedang berjalan, atau setidaknya mulai berhasil.
  • Hal ini memungkinkan seseorang untuk menulis skrip dengan sangat mudah untuk memeriksa apakah skrip itu berjalan dan mengeluarkan killperintah biasa jika seseorang ingin mengakhirinya.
  • Ini adalah cara yang murah bagi suatu program untuk melihat apakah instance yang berjalan sebelumnya tidak berhasil keluar.

Kehadiran file pid tidak menjamin bahwa proses id tertentu berjalan, tentu saja, jadi metode ini tidak 100% sangat mudah tetapi "cukup baik" dalam banyak kasus. Memeriksa apakah ada PID tertentu dalam tabel proses tidak sepenuhnya portabel di seluruh sistem operasi mirip UNIX kecuali Anda ingin bergantung pada psutilitas, yang mungkin tidak diinginkan untuk memanggil semua kejadian (dan saya percaya beberapa sistem operasi mirip UNIX menerapkan secara psberbeda pula).

File kunci digunakan oleh program untuk memastikan dua instance program yang terpisah (berperilaku baik), yang dapat berjalan bersamaan pada satu sistem, tidak mengakses yang lain pada saat yang bersamaan. Idenya adalah sebelum program mengakses sumber dayanya, ia memeriksa keberadaan file kunci, dan jika file kunci ada, apakah error keluar atau menunggu untuk pergi. Ketika tidak ada, program yang ingin "memperoleh" sumber daya membuat file, dan kemudian contoh lain yang mungkin akan muncul nanti akan menunggu proses ini dilakukan. Tentu saja, ini mengasumsikan program "memperoleh" kunci memang melepaskannya dan tidak lupa menghapus file kunci.

Ini berfungsi karena filesystem di bawah semua sistem operasi mirip UNIX memberlakukan serialisasi , yang berarti hanya satu perubahan pada filesystem yang benar-benar terjadi pada waktu tertentu. Semacam kunci suka dengan database dan semacamnya.


1
Ini benar, kecuali file kunci dihapus secara manual. VMWare Player memperlihatkan behaivor ini, misalnya, jika VMWare Player macet, Anda harus menghapus .lckfile di direktori VM, jika tidak maka akan diberitahukan bahwa file itu sedang digunakan ketika Anda mencoba memulainya.
LawrenceC

1
Bagaimana dengan Windows? Bagaimana cara menangani file .lock? Bagaimanapun, ini bukan seperti Unix.
SarahofGaia

2
Saya tidak berpikir itu umum untuk program Windows untuk bekerja dengan cara ini. Satu-satunya program dengan perilaku ini yang saya lihat adalah port dari Unix / Linux
HaMster

2
LawrenceC, Re " Ketika tidak ada, program yang ingin" memperoleh "sumber daya membuat file "; Namun ada fungsi yang tepat khusus dibangun untuk melakukan sinkronisasi tersebut. Mengapa tidak mengandalkan fungsi-fungsi itu alih-alih menggunakan "peretasan file"?
Pacerier

1
@Pacerier - Mengunci file dengan cara ini mungkin lebih sering digunakan oleh hal-hal seperti skrip shell, atau program yang mungkin berinteraksi dengan skrip shell, karena shell Unix / Linux berinteraksi dengan sistem file dengan sangat mudah, dibandingkan primitif sinkronisasi lainnya. File juga mudah bertahan di berbagai proses yang berbeda. Sebuah program berkinerja tinggi jelas akan mungkin akan memilih primitif OS asli versus file untuk menyinkronkan hal-hal secara internal atau bahkan versus proses lain yang bukan shell.
LawrenceC

14

File-file ini sering digunakan oleh daemon yang seharusnya hanya dijalankan sekali pada suatu sistem. File PID biasanya berisi nomor ID proses dari program yang sudah diluncurkan dan dijalankan jika ada. Juga, ketika dijalankan, itu menciptakan file kunci. Selama file kunci ada, itu tidak akan memulai yang lain tanpa campur tangan pengguna. Jika file kunci ada dan proses id yang disebutkan dalam file pid tidak berjalan, daemon dianggap dalam keadaan "mati", yang berarti itu seharusnya berjalan tetapi tidak mungkin karena crash atau shutdown yang tidak tepat . Ini mungkin memulai skenario startup / restart khusus untuk beberapa program. Mematikannya dengan benar akan menghapus file kunci.


+1 Menjelaskan penggunaan memiliki file kunci dan file pid.
Kyle Krull

@ Caleb - Tolong jelaskan mengapa file PID dan file kunci akan digunakan. Tampaknya file PID akan cukup. Jika file PID ada, PID dapat diperiksa untuk melihat apakah proses sedang berjalan, hanya membutuhkan langkah lebih sedikit daripada memeriksa file kunci, memeriksa file PID, dan kemudian memverifikasi keberadaan proses.
MVaughan

@MVaughan Untuk menghindari kondisi balapan jika tidak ada yang lain. Beberapa aplikasi memiliki kegunaan untuk saat-saat ketika masih membutuhkan PID tetapi dapat melepaskan kunci. Tetapi pada tingkat yang lebih mendasar jika Anda kelebihan satu file untuk kedua operasi Anda membuka pintu untuk kegagalan seperti crash meninggalkan keadaan yang tidak konsisten pada sistem.
Caleb

8

File PID akan berisi ID Proses dari proses yang sedang berjalan. Ini memiliki berbagai kegunaan; Anda dapat membacanya dan memeriksa apakah prosesnya masih berjalan dan mengambil tindakan yang sesuai atau membacanya dan mematikan prosesnya.

File kunci kemungkinan besar adalah spesifik aplikasi. File kunci digunakan untuk menunjukkan bahwa beberapa sumber daya sedang digunakan dan bahwa proses yang menginginkan akses harus menunggu sampai sumber daya dibebaskan sebelum melanjutkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.