Flok ve exec bash için güvenli mi?


13

Gördüğüm "standart" kilitleme snippet'i ...

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

execO noktada kullanmak güvenli mi (test böyle söylüyor) ? Alt işlem kilidi tutacak mı?

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

Yürütülen işlemlerin açık dosya tanımlayıcılarını tutması ve flock'un dosya tanımlayıcılarını kullandığı için çalışması gerekir. Ancak bunu kesin ve açık hale getiren herhangi bir belge bulamıyorum.

Kayıt için, bu Linux'a özgüdür.

Yanıtlar:


3

Evet, kilitler korunur exec. Kilitler execve, dosya tanımlayıcı açık kaldığı sürece , temel sistem çağrısı boyunca korunur . Dosya tanımlayıcıları execve, exec'de kapatılmak üzere yapılandırılmadıkça ve kabuk yeniden yönlendirmesi ile oluşturulan dosya tanımlayıcıları, yürütme sırasında yakın olarak işaretlenmezse, açık kalır .


6

Evet öyle. Exec yalnızca işlem görüntüsünün yerini alır, ancak yine de aynı işlemdir, bu nedenle onunla ilişkili OS düzeyi kilitler aynı kalır.

Çalıştığını doğrulamak çok kolay:

kilit

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

senaryo

sleep 100

./lockSonraki 100 saniye içinde iki kez koşmayı deneyin . Kilidi sadece bir kez alırsınız, ergo execkilidi serbest bırakmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.