linux 临时文件 锁,linux – 无法使用文件描述符flock锁定文件
您正在使用-n,如果無(wú)法立即獲取鎖定將終止,并且flock將以退出代碼1失敗.因此,在第一個(gè)終端中執(zhí)行代碼后,它會(huì)休眠100秒.接下來(lái)當(dāng)你在另一個(gè)終端中執(zhí)行相同的操作時(shí),flock會(huì)失敗并返回1,但是因?yàn)橛幸粋€(gè);并且您不對(duì)返回代碼執(zhí)行任何操作,shell只是繼續(xù)執(zhí)行下一個(gè)語(yǔ)句并休眠100秒.
因此,您需要對(duì)flock的返回碼做出如下決定.
( flock -x -n 100 || exit 55; sleep 100; ) 100> /tmp/foo.txt
現(xiàn)在,如果您在一個(gè)終端中執(zhí)行上述行,它將休眠100秒.接下來(lái),如果您在另一個(gè)終端上運(yùn)行代碼,它將立即返回提示.回聲$?然后你會(huì)看到它已經(jīng)返回55,因?yàn)槲覀兿胍褂脇|返回.
什么||確實(shí)是短路的.如果flock在正常退出時(shí)返回0,這是shell的真值,它將不執(zhí)行表達(dá)式的右側(cè),因此轉(zhuǎn)到下一個(gè)語(yǔ)句.如果返回值為1,對(duì)于shell為false,它將繼續(xù)計(jì)算右側(cè)表達(dá)式,即出口55,因此退出.你也可以通過(guò)if-then-fi來(lái)做到這一點(diǎn).
另請(qǐng)注意,我使用了bracket()而不是花括號(hào){}.這是因?yàn)?如果你使用curley-braces,那么命令將在當(dāng)前shell中執(zhí)行,如果你使用exit,那么它將從當(dāng)前shell退出.括號(hào)將創(chuàng)建一個(gè)子shell,因此從那里執(zhí)行退出會(huì)終止子shell并返回到原始shell.
它適用于您使用-c的第一個(gè)示例,因?yàn)槟趂lock參數(shù)中包含了單個(gè)命令.因此,如果flockis無(wú)法獲取鎖定,它將不會(huì)執(zhí)行語(yǔ)句并終止.
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的linux 临时文件 锁,linux – 无法使用文件描述符flock锁定文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个小白如何创建MYSQL数据表_MyS
- 下一篇: 电脑只对一个u盘不显示不出来怎么办 电脑