বাচ্চা কি ঝাঁক এবং নিরাপদ?


13

"স্ট্যান্ডার্ড" লকিং স্নিপেট আমি দেখেছি এরকম কিছু ঘটে ...

(
    flock -n 200 || exit 1;
    # do stuff
) 200>program.lock

execএই মুহুর্তে ব্যবহার করা কি নিরাপদ (টেস্টিং বলে মনে হচ্ছে) ? উপ-প্রসেসটি কী লকটি ধরে রাখবে?

(
    flock -n 200 || exit 1;
    exec /usr/bin/python vendors-notcoolstuff.py
) 200>program.lock

আমি অস্পষ্টভাবে মনে করি এক্সিকিউট প্রক্রিয়াগুলি ওপেন ফাইল বর্ণনাকারী বজায় রাখে এবং যেহেতু ঝাঁক ফাইলের বিবরণ ব্যবহার করে এটি ব্যবহার করা উচিত। তবে আমি এমন কোনও ডকুমেন্টেশন খুঁজে পাচ্ছি না যা এটি সুনির্দিষ্ট এবং স্পষ্ট করে তোলে।

রেকর্ডের জন্য, এটি লিনাক্সের জন্য নির্দিষ্ট।

উত্তর:


3

হ্যাঁ, লকগুলি জুড়ে সংরক্ষণ করা হয়েছে execexecveফাইল বর্ণনাকারী যতক্ষণ না খোলা থাকে ততক্ষণ অন্তর্নিহিত সিস্টেম কল জুড়ে লকগুলি সংরক্ষণ করা হয় । ফাইল বর্ণনাকারীগুলি execveএক্সিকিউটে বন্ধ রাখার জন্য কনফিগার না করা থাকলে এবং শেল পুনর্নির্দেশ দ্বারা নির্মিত ফাইল বর্ণনাকারীগুলি এক্স-এক্স-এক্সিকিউটিভ হিসাবে চিহ্নিত করা হয় না across


6

হ্যাঁ, তাই এক্সিকিউট কেবল প্রক্রিয়া চিত্রটি প্রতিস্থাপন করে, তবে এটি এখনও একই প্রক্রিয়া তাই এর সাথে যুক্ত ওএস-স্তরের লকগুলি একই থাকে।

এটি কার্যকরভাবে যাচাই করা খুব সহজ:

লক

(
    flock -n 200 || exit 1;
    echo "locked"
    exec ./script
) 200>program.lock

লিপি

sleep 100

এর ./lockপরের 100 সেকেন্ডের মধ্যে দু'বার দৌড়ানোর চেষ্টা করুন । আপনি কেবল একবার লক পাবেন, এরগো execলকটি প্রকাশ করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.