Saya memiliki proses P yang menulis konten ke file F. Saya harus dapat mengaktifkan/menonaktifkan P secara dinamis untuk menulis ke F. Saya mencoba mengubah izin untuk pengguna/grup tetapi ini memerlukan proses untuk dimulai ulang (sebenarnya seluruh sistem).
Pada akhirnya saya harus dapat menjalankan "skrip" yang melakukan hal berikut:
EnablePWriteF
sleep 10
DisablePWriteF
dan sebagai hasilnya P akan dapat menulis selama 10 detik pertama dan tidak setelah itu. Saya menggunakan distribusi Debian.
Apakah ini mungkin?
Pembaruan:
Kasus penggunaan sebenarnya adalah saya mencoba memfilter proses yang diberikan untuk menulis ke file perangkat tertentu /dev/fb0
Saya memiliki dua proses yang menulis ke file itu dan saya ingin menjadi dapat menentukan dengan tepat salah satu dari dua yang diizinkan untuk menulis ke file tersebut pada saat tertentu tanpa harus mematikan/menghentikan proses.
Jawaban yang Diterima:
Setidaknya pada versi Linux saya, sepertinya Anda dapat menggunakan kunci wajib. Saya hanya mengujinya dengan /dev/null
, tetapi saya tidak dapat melihat alasan mengapa ini tidak berfungsi dengan perangkat lain seperti buffer bingkai Anda:
Sebagai root:
mount -t tmpfs -o mand locked-fb some-dir
cp -a /dev/fb0 some-dir/fb0-for-process-A
cp -a /dev/fb0 some-dir/fb0-for-process-B
chmod g+s some-dir/fb0-for-process-[AB] # enable mand-lock
Kemudian misalnya, menggunakan perl
dan File::FcntlLock
modul (atau lakukan langsung di C):
#! /usr/bin/perl
use File::FcntlLock;
$l = new File::FcntlLock;
$l->l_type(F_RDLCK);
open my $fba, '<', 'some-dir/fb0-for-process-A' or die$!;
sleep 10; # writing OK
$l->lock($fba, F_SETLK); # writing blocked on fb0-for-process-A
sleep 10;
exit; # lock now released (or do an explicit unlock)
Minta satu proses membuka perangkat fb0 melalui fb0-for-process-A
file, dan yang lainnya melalui fb0-for-process-B
dan menerapkan penguncian ke kedua file untuk memutuskan proses mana yang dapat menulis pada waktu tertentu.