LOCKFILE(1) General Commands Manual LOCKFILE(1)

lockfile - 條件標誌檔案建立命令

lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -! | -ml | -mu | filename ...

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 比較).

如果系統郵件spool目錄有許可權允許它,或者如果lockfile正好被setgid了,那麼它可以透過 使用相應的選項 -ml-mu lock和unlock你的系統郵箱.

假設你想確定訪問檔案"important"是序列的,也即,沒有其它程式或shell指令碼允許訪問它.為了簡省起見,讓我們假定它是一個shell指令碼.在這個例子中,你應該像這樣解決:

... lockfile important.lock ... access_"important"_to_your_hearts_content ... rm -f important.lock ...
現在如果所有訪問"important"的指令碼按照這條規則,你就可以確保在`lockfile'和`rm'命令之間至多隻有一個指令碼在執行.

用作隱含變數以確定呼叫者的登入名

/etc/passwd
為了驗證和/或糾正呼叫者的登入名(如果需要的話,同時也是為了找出HOME目錄)
/var/spool/mail/$LOGNAME.lock
系統郵箱的lockfile,出現在其中的環境變數不由系統的環境變數決定,而是會透過在/etc/passwd中查詢確定.

rm(1), mail(1), binmail(1), sendmail(8), procmail(1)

使用更短的檔名.
沒有對lockfile "x"所存放的目錄的寫的許可權,或者超過一個lockfile幾乎同時正在試圖強制lock.
lockfile "x"因為超時的緣故將要強制刪除 (與 procmail(1)) 中的 LOCKTIMEOUT 作比較).
系統交換空間溢位.
Lockfile將刪除到此為止建立的所有檔案並終止.
retries 限制已經到達.
"x"看上去不是有效的檔名.
缺失子目錄或者許可權不夠.

確實少於一個.

-! 標識的操作行為,儘管有用,但是並不很直接或一致.當測試lockfile的返回值時,shell指令碼編寫者應該仔細考慮是使用 -! 標識簡單地作反向測試,還是對原來的退出程式碼執行一次轉換. 通常, -! 標識應該只用在lockfile是迴圈的條件之時.

Lockfile不相容NFS,而且八位還原.

使用-h或-?選項呼叫lockfile會使得它顯示命令列方式的幫助頁.使用-v選項呼叫會使得它顯示版本資訊.

多個 -! 標識會切換返回狀態.

因為標識可以出現在命令列的任何位置,所以任何一個以'-'開頭的檔名必須加'./"在前面.

當任何接在後面的檔案正在建立(也即,它們正在使用)時, retries 的次數不能重新設定.不過,它可以透過在命令列上指定 -rnewretries 於每個檔案之後來重新設定.

儘管任何名字的檔案都可用作lockfiles,通常習慣還是使用副檔名為'.lock'的檔案來lock郵件資料夾(它添加於郵件夾名之後).如果不想擔心檔名太長了,也不必遵從任何其它的lockfilename的習慣,那麼一個最好的方法就是透過新增字首`lock.'來生成一個與已經存在的檔案相應的lockfilename,並且在其後新增鎖定檔案的i-node數.

該程式為 http://www.procmail.org/或者 ftp.procmail.org的 pub/procmail/procmail mail-processing-package (v3.14)的一部分.

有一個針對procmail包中任何程式相關問題的郵件列表:

<procmail-users@procmail.org>
用來提交問題/答案.
<procmail-users-request@procmail.org>
用來請求訂閱.

如果你想即時獲得新版本和公開補丁的通告,請發訂閱請求到

procmail-announce-request@procmail.org
(這是一個只讀列表).

Stephen R. van den Berg

<srb@cuci.nl>

riser <boomer@ccidnet.com>

2001/08/08

《中國linux論壇man手冊頁翻譯計劃》:

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh