with-lock-ex - ອອນລາຍໃນຄລາວ

ນີ້ແມ່ນຄໍາສັ່ງທີ່ມີ-lock-ex ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


with-lock-ex - locker ໄຟລ໌

ສະຫຼຸບສັງລວມ


with-lock-ex -w|-q|-f lockfile ຄໍາສັ່ງ ໂຕ້ຖຽງ ...

ລາຍລະອຽດ


with-lock-ex ຈະເປີດແລະລັອກ lockfile ສໍາລັບການຂຽນແລະຫຼັງຈາກນັ້ນໃຫ້ອາຫານສ່ວນທີ່ເຫຼືອຂອງ
ການໂຕ້ຖຽງຂອງຕົນເພື່ອ exec(2); ເມື່ອຂະບວນການນັ້ນຢຸດ fd ຈະຖືກປິດແລະໄຟລ໌
ປົດລັອກອັດຕະໂນມັດໂດຍ kernel.

ຖ້າໄຟລ໌ບໍ່ມີ, ມັນຖືກສ້າງຂຶ້ນ, ດ້ວຍການອະນຸຍາດ rw ສໍາລັບແຕ່ລະຊັ້ນຜູ້ໃຊ້ສໍາລັບ
ທີ່ umask ມີ w.

OPTIONS


-w ລໍຖ້າໃຫ້ລັອກສາມາດໃຊ້ໄດ້.

-f ລົ້ມເຫລວ (ພິມຂໍ້ຄວາມໄປຫາ stderr ແລະອອກ 255) ຖ້າລັອກບໍ່ສາມາດໄດ້ຮັບ
ທັນທີເພາະວ່າຂະບວນການອື່ນມີມັນ.

-q Silently do nothing (ie, exit 0 ແທນ​ທີ່​ຈະ​ປະ​ຕິ​ບັດ​ຂະ​ບວນ​ການ​ທີ່​ກໍາ​ນົດ​ໄວ້​) ຖ້າ​ຫາກ​ວ່າ​
lock ບໍ່ສາມາດໄດ້ຮັບທັນທີເພາະວ່າຂະບວນການອື່ນມີມັນ.

ດາວ ລັອກ


ໂປໂຕຄອນລັອກທີ່ໃຊ້ບໍ່ໄດ້ທົນທຸກຈາກການລັອກ stale. ຖ້າບໍ່ສາມາດລັອກໄດ້
ທີ່ໄດ້ມາ, ຂະບວນການແລ່ນຫນຶ່ງຫຼືຫຼາຍກວ່ານັ້ນຕ້ອງຖືລັອກ; ຖ້າ​ຫາກ​ວ່າ lock ໄດ້​
ໄດ້ຮັບການປົດປ່ອຍຂະບວນການເຫຼົ່ານັ້ນຄວນຈະຖືກຂ້າຕາຍ.

ພາຍໃຕ້ສະຖານະການທີ່ບໍ່ມີຄວນຈະມີ 'stale lock cleaner' ວຽກ cron, ຫຼືຄ້າຍຄືກັນ, ໄດ້ຮັບການສ້າງຕັ້ງຂຶ້ນ.
ໃນລະບົບທີ່ມີ locks ຫຼາຍອັນຍິ່ງໃຫຍ່, lockfiles ເກົ່າອາດຈະຖືກໂຍກຍ້າຍອອກຈາກ cron ແຕ່
ພຽງ​ແຕ່​ຖ້າ​ຫາກ​ວ່າ lock ໄດ້​ມາ​ແຕ່​ລະ​ຄົນ​ກ່ອນ​ທີ່​ຈະ lockfile ໄດ້​ຖືກ​ໂຍກ​ຍ້າຍ​ອອກ​, ສໍາ​ລັບ​ການ​ຍົກ​ຕົວ​ຢ່າງ​

with-lock-ex -q lockfile rm lockfile

DEADLOCKS


ບໍ່ມີການກວດພົບການລັອກ. ໃນລະບົບທີ່ມີ locks ຫຼາຍ, ລໍາດັບຊັ້ນລັອກຄວນ
ໄດ້ຮັບການສ້າງຕັ້ງຂຶ້ນ, ເຊັ່ນວ່າສໍາລັບຄູ່ຂອງ locks ທຸກ A ແລະ B ເຊິ່ງຂະບວນການອາດຈະລັອກ
ພ້ອມໆກັນ, ບໍ່ວ່າຈະ A>B or B>A ບ່ອນທີ່ຄວາມສຳພັນ > ແມ່ນ transitive ແລະ noncyclic.

ຫຼັງຈາກນັ້ນ, ສໍາລັບສອງ locks ໃດ X ແລະ Y ກັບ X>Y ມັນໄດ້ຖືກຫ້າມບໍ່ໃຫ້ໄດ້ມາ X ໃນຂະນະທີ່ຖື Y.
ແທນທີ່ຈະ, ໄດ້ມາ X ທໍາອິດ, ຫຼືປ່ອຍ Y ກ່ອນ (re)ໄດ້ມາ X ແລະ Y ໃນຄໍາສັ່ງທີ່.

(ມີ​ວິ​ທີ​ການ​ທີ່​ສັບ​ສົນ​ຫຼາຍ​ກວ່າ​ທີ່​ຈະ​ຫຼີກ​ເວັ້ນ​ການ deadlocks​, ແຕ່​ລໍາ​ດັບ​ການ​ລັອກ​ແມ່ນ​ງ່າຍ​ດາຍ​ເພື່ອ​
ເຂົ້າໃຈແລະປະຕິບັດ. ຖ້າມັນບໍ່ກົງກັບຄວາມຕ້ອງການຂອງເຈົ້າ, ໃຫ້ປຶກສາວັນນະຄະດີ.

ກຳ ລັງລັອກ ໂປຣແກຣມ PROTOCOL


ໂປໂຕຄອນລັອກທີ່ໃຊ້ໂດຍ with-lock-ex ແມ່ນດັ່ງຕໍ່ໄປນີ້:

lock ແມ່ນຖືໂດຍຂະບວນການ (ຫຼືກຸ່ມຂະບວນການ) ເຊິ່ງຖືເປັນ lock exclusive fcntl
ໃນ byte ທໍາອິດຂອງໄຟລ໌ທໍາມະດາທີ່ມີຊື່ທີ່ກໍານົດໄວ້. ຜູ້ຖື lock ໄດ້
(ແລະມີພຽງແຕ່ຜູ້ຖືລັອກ) ອາດຈະລຶບໄຟລ໌ຫຼືປ່ຽນ inode ທີ່ຊື່
ອ້າງເຖິງ, ແລະທັນທີທີ່ມັນເຮັດ, ມັນຢຸດເຊົາການຖື lock ໄດ້.

ຂະບວນການໃດກໍ່ຕາມອາດຈະສ້າງໄຟລ໌ຖ້າມັນບໍ່ມີ. ບໍ່ຈໍາເປັນຕ້ອງມີໄຟລ໌ທີ່ຈະ
ມີຂໍ້ມູນຕົວຈິງໃດໆ. ແທ້ຈິງແລ້ວ, ການນໍາໃຊ້ໄຟລ໌ສໍາລັບການເກັບຮັກສາຂໍ້ມູນແມ່ນແຂງແຮງ
ບໍ່ແນະນໍາ, ເພາະວ່ານີ້ຈະປິດກົນລະຍຸດສ່ວນໃຫຍ່ສໍາລັບການອັບເດດທີ່ເຊື່ອຖືໄດ້. ໃຊ້ ກ
lockfile ແຍກຕ່າງຫາກແທນ.

ຄວາມ​ສາ​ມາດ​ທີ່​ຈະ​ໄດ້​ຮັບ lock ໄດ້​ສອດ​ຄ່ອງ​ກັບ​ການ​ອະ​ນຸ​ຍາດ​ຂຽນ​ກ່ຽວ​ກັບ​ໄຟລ​໌ (ແລະ​ແນ່​ນອນ​
ການ​ອະ​ນຸ​ຍາດ​ໃຫ້​ສ້າງ​ໄຟລ​໌​, ຖ້າ​ຫາກ​ວ່າ​ມັນ​ບໍ່​ມີ​ຢູ່​ແລ້ວ​)​. ຢ່າງໃດກໍຕາມ, ຂະບວນການທີ່ມີ
ພຽງ​ແຕ່​ການ​ອະ​ນຸ​ຍາດ​ອ່ານ​ໃນ​ໄຟລ​໌​ສາ​ມາດ​ປ້ອງ​ກັນ​ການ lock ໄດ້​ມາ​ທັງ​ຫມົດ​; ດັ່ງນັ້ນ
ປົກກະຕິແລ້ວ lockfiles ບໍ່ຄວນເປັນໂລກທີ່ສາມາດອ່ານໄດ້.

ໃນເວລາທີ່ (ກຸ່ມຂອງ) ຂະບວນການຕ້ອງການທີ່ຈະໄດ້ຮັບ lock ໄດ້, ມັນຄວນຈະເປີດໄຟລ໌ (ມີ
O_CREAT) ແລະ​ລັອກ​ມັນ​ດ້ວຍ​ fcntl(2​) F_RWLCK, ການດໍາເນີນງານ F_SETLK or F_SETLKW. ຖ້ານີ້
ສໍາເລັດມັນຄວນຈະ fstat ຕົວອະທິບາຍໄຟລ໌ທີ່ມັນມີ, ແລະໄຟລ໌ໂດຍເສັ້ນທາງຂອງມັນ. ຖ້າ
ອຸປະກອນແລະ inode ກົງກັນຫຼັງຈາກນັ້ນ lock ໄດ້ມາແລະຍັງຄົງໄດ້ມາຈົນກ່ວານັ້ນ
ກຸ່ມຂະບວນການປ່ຽນຊື່ໄຟລ໌ທີ່ອ້າງອີງເຖິງ, ລຶບໄຟລ໌, ຫຼືປ່ອຍ
ລັອກ fcntl. ຖ້າ​ຫາກ​ວ່າ​ເຂົາ​ເຈົ້າ​ເຮັດ​ບໍ່​ໄດ້​ຫຼັງ​ຈາກ​ນັ້ນ​ຂະ​ບວນ​ການ​ອື່ນ​ໄດ້​ຮັບ​ການ lock ແລະ​ລົບ​ໄດ້​
ໄຟລ໌ໃນເວລານີ້; ດຽວນີ້ເຈົ້າຕ້ອງປິດຕົວອະທິບາຍໄຟລ໌ຂອງເຈົ້າ ແລະເລີ່ມໃໝ່ອີກຄັ້ງ. ມີລັອກ-
ex ປະຕິບັດຕາມຂໍ້ກໍານົດນີ້.

ໃຫ້ສັງເກດວ່າ flock(2) ເປັນປະເພດທີ່ແຕກຕ່າງກັນຂອງ lock ກັບ fcntl(2). with-lock-ex ການນໍາໃຊ້ fcntl.

ໃຊ້ກັບ-lock-ex ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net



ລ່າສຸດ Linux ແລະ Windows ໂຄງການອອນໄລນ໌