ນີ້ແມ່ນຄໍາສັ່ງທີ່ມີ-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