ফাইল খোলা থাকা কোনও লক নয় কারণ, প্রতিটি প্রক্রিয়াটি যদি ফাইলটি প্রথমে খোলা আছে কিনা তা পরীক্ষা করে দেখতে হয় এবং এটি না থাকলে এগিয়ে না যায় বা তৈরি না হয় / না থাকলে তা দুটি প্রক্রিয়া একই সাথে চেক করতে পারে, উভয়ই আবিষ্কার করে এটি খোলেনি, তবে এটি তৈরি বা খুলুন উভয়ই।
লক হিসাবে একটি ফাইল ব্যবহার করতে, চেক এবং লক অপারেশন একটি একক নিরবচ্ছিন্ন অপারেশন হতে হবে। আপনি ইউনিক্স ফাইল সিস্টেমে এটি কেবল পঠনযোগ্য মোডের সাথে একটি ফাইল তৈরি করে এবং আনলক করার জন্য মুছে ফেলাতে এটি অর্জন করতে পারেন। যদি ফাইলটি বিদ্যমান থাকে (এবং কেবল পঠিত হয়) তবে ফাইল তৈরি ব্যর্থ হবে, সুতরাং আপনি একক পরমাণু ক্রিয়াকলাপে চেক-লক পাবেন get
যদি আপনার লকিং প্রক্রিয়াটি একটি শেল স্ক্রিপ্ট হয় যা ডেমন হিসাবে চলমান থাকে তবে আপনি এই umask
প্রক্রিয়াটি ব্যবহার করতে পারেন , প্রতি-প্রক্রিয়া সেটিং যা নতুন ফাইলগুলি তৈরি করার অনুমতিগুলি সেট করে:
oldumask = $ (umask)
umask 222 # মালিকদের পক্ষেও অলিখিত লিখনযোগ্য ফাইলগুলি তৈরি করুন
যদি প্রতিধ্বনি $$> / var / লক / ফু হয়
তারপর
: লক করা সফল হয়েছে
আর
: লক ব্যর্থ হয়েছে
ফাই
umask $ oldumask
এটি নিজস্ব প্রক্রিয়াটি 'পিআইডি ফাইলে লিখবে যা আপনার অন্যান্য সমস্যা সমাধান করে:
cat /var/lock/foo
"এই ফাইলটি কোন প্রসেসে খোলা আছে?" সম্পর্কিত সুনির্দিষ্ট প্রশ্নের ক্ষেত্রে, আপনি যখন কোনও ফাইল-সিস্টেম আনমাউন্ট করতে চান তখন এটি কার্যকর হতে পারে তবে কিছু প্রক্রিয়াতে একটি ফাইল খোলা থাকার কারণে এটি করা যায় না। যদি আপনার কাছে এই আদেশগুলি উপলভ্য না থাকে তবে আপনি
/proc
মূল হিসাবে জিজ্ঞাসা করতে পারেন :
ls -l /proc/*/cwd | grep '/var/lock/foo$'
বা, নশ্বর ব্যবহারকারী হিসাবে:
ls -l /proc/*/cwd 2>/dev/null | grep '/var/lock/foo$'