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的返回值時,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包中任何程序相關問題的郵件列表:
如果你想即時獲得新版本和公開補丁的通告,請發訂閱請求到
Stephen R. van den Berg
riser <boomer@ccidnet.com>
2001/08/08
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh