NAME(名稱)
lockfile - 條件標誌檔案建立命令SYNOPSIS(總覽)
lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -! | -ml | -mu | filename ...DESCRIPTION(描述)
lockfile可以用來建立一個或多個 訊號量(semaphore) 檔案.如果lockfile不能建立所有指定的檔案(按照指定的順序),那麼它會等待一段 休眠期(sleeptime) (預設為8秒)並從不成功的最後一個檔案開始重試.你可以指定失敗返回之前 重試(retries) 的次數. 如果 retries 的次數設為-1(預設地,也即 -r-1) lockfile會永遠重試下去. 如果在所有檔案建立之前 retries 的次數已經滿了,lockfile會返回失敗的資訊並刪除所有已經建立的檔案. 在shell指令碼中使用lockfile作為迴圈的條件可以很容易地透過使用 -! 標識反向退出的狀態來實現.為了防止無限迴圈,除了lockfile已經存在以外的任何原因的失敗都不會反向為成功狀態,而是仍然以失敗狀態返回. 所有標識可以在命令列中的任何地方指定,碰到它們就進行處理.命令列簡單地由左至右進行解析. 所有透過lockfile建立的檔案都是隻讀的,因此必須使用 rm -f 來刪除. 如果你指定了一個 locktimeout 那麼lockfile會在lockfile最後一次修改/建立之後locktimeout秒過後強制性地刪除(很可能是一些其它程式意外死掉很長一段時間後造成不能清除殘餘的lockfiles).Lockfile不受時鐘偏差的影響.在lockfile強制被清除之後,延遲的 suspend 秒(預設為16)開始計數,這是為了防止無意的直接刪除了任何由另一程式新建立的lockfile(與 procmail(1)) 中的 SUSPEND 比較).Mailbox locks (郵箱鎖定)
如果系統郵件spool目錄有許可權允許它,或者如果lockfile正好被setgid了,那麼它可以透過 使用相應的選項 -ml 和 -mu lock和unlock你的系統郵箱.EXAMPLES(示例)
假設你想確定訪問檔案"important"是序列的,也即,沒有其它程式或shell指令碼允許訪問它.為了簡省起見,讓我們假定它是一個shell指令碼.在這個例子中,你應該像這樣解決:... lockfile important.lock ...
access_"important"_to_your_hearts_content ... rm -f important.lock
...
現在如果所有訪問"important"的指令碼按照這條規則,你就可以確保在`lockfile'和`rm'命令之間至多隻有一個指令碼在執行.
ENVIRONMENT(環境變數)
- LOGNAME
- 用作隱含變數以確定呼叫者的登入名
FILES(相關檔案)
- /etc/passwd
- 為了驗證和/或糾正呼叫者的登入名(如果需要的話,同時也是為了找出HOME目錄)
- /var/spool/mail/$LOGNAME.lock
- 系統郵箱的lockfile,出現在其中的環境變數不由系統的環境變數決定,而是會透過在/etc/passwd中查詢確定.
SEE ALSO (另見)
rm(1), mail(1), binmail(1), sendmail(8), procmail(1)DIAGNOSTICS(診斷)
- Filename too long,...
- 使用更短的檔名.
- Forced unlock denied on "x"
- 沒有對lockfile "x"所存放的目錄的寫的許可權,或者超過一個lockfile幾乎同時正在試圖強制lock.
- Forcing lock on "x"
- lockfile "x"因為超時的緣故將要強制刪除 (與 procmail(1)) 中的 LOCKTIMEOUT 作比較).
- Out of memory,...
- 系統交換空間溢位.
- Signal received,...
- Lockfile將刪除到此為止建立的所有檔案並終止.
- Sorry,...
- retries 限制已經到達.
- Truncating "x" and retrying lock
- "x"看上去不是有效的檔名.
- Try praying,...
- 缺失子目錄或者許可權不夠.