LOCKFILE(1)

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,...
    缺失子目錄或者權限不夠.

BUGS
確實少於一個.

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

MISCELLANEOUS(雜項)
Lockfile不相容NFS,而且八位還原.

NOTES(備注)
使用-h或-?選項調用lockfile會使得它顯示命令行方式的幫助頁.使用-v選項調用會使得它顯示版本信息.

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

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

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

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

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

MAILINGLIST(郵件列表)
有一個針對procmail包中任何程式相關問題的郵件列表:
    <procmail-users@procmail.org>
        用來提交問題/答案.
    <procmail-users-request@procmail.org>
        用來請求訂閱.

如果你想即時獲得新版本和公開補丁的通告,請發訂閱請求到
    procmail-announce-request@procmail.org
(這是一個只讀列表).

AUTHOR
Stephen R. van den Berg
    <srb@cuci.nl>

[中文版維護人]
riser <boomer@ccidnet.com>

[中文版最新更新]
2001/08/08

《中國linux論壇man手冊頁翻譯計劃》:
http://cmpp.linuxforum.net