ฝูงสัตว์ & exec ปลอดภัยในการทุบตี?


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

ฉันจำได้ว่ากระบวนการ exec'd จะคงไว้ซึ่งตัวอธิบายไฟล์ที่เปิดอยู่และเนื่องจาก flock ใช้ตัวอธิบายไฟล์มันควรจะทำงานได้ แต่ฉันไม่สามารถหาเอกสารที่ทำให้ชัดเจนและชัดเจนได้

สำหรับเร็กคอร์ดนี่เป็นข้อมูลเฉพาะสำหรับ Linux

คำตอบ:


3

execใช่ล็อคจะถูกเก็บไว้ข้าม การล็อกถูกสงวนไว้ระหว่างการเรียกใช้ระบบพื้นฐานexecveตราบใดที่ตัวให้คำอธิบายไฟล์ยังคงเปิดอยู่ ตัวอธิบายไฟล์ยังคงเปิดอยู่execveยกเว้นว่าพวกเขาได้รับการกำหนดค่าให้ปิดใน exec และตัวอธิบายไฟล์ที่สร้างโดยการเปลี่ยนเส้นทางของเชลล์จะไม่ถูกทำเครื่องหมายเป็น close-on-exec


6

ใช่แล้ว. Exec เพียงแทนที่อิมเมจกระบวนการ แต่ยังคงเป็นกระบวนการเดียวกันดังนั้นการล็อกระดับ OS ที่เชื่อมโยงจะยังคงเหมือนเดิม

มันง่ายมากที่จะตรวจสอบว่ามันใช้งานได้:

ล็อค

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

ต้นฉบับ

sleep 100

ลองใช้./lockสองครั้งภายใน 100 วินาทีถัดไป คุณจะได้รับการล็อคเพียงครั้งเดียวดังนั้น Ergo execไม่ได้ปลดล็อค

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.