在 Linux 系統的目錄/var/run 下面一般我們都會看到很多的*.pid 檔案。而且往往新安裝的程式在執行後也會在/var/run 目錄下面產生自己的 pid 檔案。那麼這些 pid 檔案有什麼作用呢?它的內容又是什麼呢?
(1) pid 檔案的內容:pid 檔案為文字檔案,內容只有一行, 記錄了該程序的 ID 。
用 cat 命令可以看到。
(2) pid 檔案的作用:防止程序啓動多個副本。只有獲得 pid 檔案 (固定路徑固定檔名) 寫入許可權 (F_WRLCK) 的程序才能正常啓動並把自身的 PID 寫入該檔案中。其它同一個程式的多餘程序則自動退出。
(3) 程式設計技巧:
呼叫 fcntl 設定 pid 檔案的鎖定 F_SETLK 狀態,其中鎖定的標誌位 F_WRLCK 。
如果成功鎖定,則寫入程序當前 PID,程序繼續往下執行。
如果鎖定不成功,説明已經有同樣的程序在執行了,當前程序結束退出。
lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;
if (fcntl(fd, F_SETLK, &lock) < 0){ //鎖定不成功, 退出…… } sprintf (buf, “%dn”, (int) pid); pidsize = strlen(buf); if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){ //寫入不成功, 退出…… } (4) 一些注意事項: i) 如果程序退出,則該程序加的鎖自動失效。 ii) 如果程序關閉了該檔案描述符 fd, 則加的鎖失效。 (整個程序執行期間不能關閉此檔案描述符) iii) 鎖的狀態不會被子程序繼承。如果程序關閉則鎖失效而不管子程序是否在執行。