linux u盘 uid pid,linux下的pid文件的作用
在Linux系統(tǒng)的目錄/var/run下面一般我們都會看到很多的*.pid文件。而且往往新安裝的程序在運行后也會在/var/run目錄下面產(chǎn)生自己的pid文件。那么這些pid文件有什么作用呢?它的內(nèi)容又是什么呢?
(1) pid文件的內(nèi)容:pid文件為文本文件,內(nèi)容只有一行, 記錄了該進程的ID。
用cat命令可以看到。
(2) pid文件的作用:防止進程啟動多個副本。只有獲得pid文件(固定路徑固定文件名)寫入權(quán)限(F_WRLCK)的進程才能正常啟動并把自身的PID寫入該文件中。其它同一個程序的多余進程則自動退出。
(3) 編程技巧:
調(diào)用fcntl設(shè)置pid文件的鎖定F_SETLK狀態(tài),其中鎖定的標(biāo)志位F_WRLCK。
如果成功鎖定,則寫入進程當(dāng)前PID,進程繼續(xù)往下執(zhí)行。
如果鎖定不成功,說明已經(jīng)有同樣的進程在運行了,當(dāng)前進程結(jié)束退出。
lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET;
if (fcntl(fd, F_SETLK, &lock) < 0){ ? ? //鎖定不成功, 退出...... } sprintf (buf, "%d\n", (int) pid); pidsize = strlen(buf); if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){ ? ? //寫入不成功, 退出...... }
(4) 一些注意事項: i) 如果進程退出,則該進程加的鎖自動失效。 ii) 如果進程關(guān)閉了該文件描述符fd, 則加的鎖失效。(整個進程運行期間不能關(guān)閉此文件描述符) iii) 鎖的狀態(tài)不會被子進程繼承。如果進程關(guān)閉則鎖失效而不管子進程是否在運行。 (Locks are associated with processes. A process can only have one kind of lock set for each byte of a given file. When any file descriptor for that file is closed by the process, all of the locks that process holds on that file are released, even if the locks were made using other descriptors that remain open. Likewise, locks are released when a process exits, and are not inherited by child processes created using fork.)
(5) 參考資料: fcntl(文件鎖) 表頭文件 #include #include 函數(shù)定義int fcntl(int fd, int cmd, struct flock *lock); 函數(shù)解釋fd:文件描寫符 設(shè)置的文件描寫符,參數(shù)cmd代表欲壟斷的號召 F_DUPFD 復(fù)制參數(shù)fd的文件描寫符,厲行獲勝則歸來新復(fù)制的文件描寫符, F_GETFD 獲得close-on-exec符號,若些符號的FD_CLOEXEC位為0,代表在調(diào)用 exec()相干函數(shù)時文件將不會關(guān)閉 F_SETFD 設(shè)置close-on-exec符號,該符號以參數(shù)arg的 FD_CLOEXEC位定奪 F_GETFL獲得open()設(shè)置的符號 F_SETFL改換open()設(shè)置的符號 F_GETLK獲得文件鎖定的事態(tài),依據(jù)lock的描寫,定奪是否上文件鎖 F_SETLK設(shè)置文件鎖定的事態(tài),此刻flcok,構(gòu)造的l_tpye值定然是F_RDLCK、F_WRLCK或F_UNLCK, 萬一無法發(fā)生鎖定,則歸來-1 F_SETLKW 是F_SETLK的阻塞版本,在無法獲得鎖時會進去睡眠事態(tài),萬一能夠獲得鎖可能捉拿到信號則歸來 參數(shù)lock指針為flock構(gòu)造指針定義如下 struct flock { ... short l_typejngaoy.com; short l_whence; off_t l_start; 鎖定區(qū)域的開關(guān)位置 off_t l_len; 鎖定區(qū)域的大小 pid_t l_pid; 鎖定動作的歷程 ... }; 1_type有三種事態(tài): F_RDLCK讀取鎖(分享鎖) F_WRLCK寫入鎖(排斥鎖) F_UNLCK解鎖 l_whence也有三種措施 SEEK_SET以文件開始為鎖定的起始位置 SEEK_CUR以現(xiàn)在文件讀寫位置為鎖定的起始位置 SEEK_END以文件尾為鎖定的起始位置 歸來值 獲勝則歸來0,若有訛謬則歸來-1 l_len:加鎖區(qū)的長度 l_pid:具有阻塞目前歷程的鎖,其持有歷程的歷程號儲藏在l_pid中,由F_GETLK歸來 等閑是將l_start設(shè)置為0,l_whence設(shè)置為SEEK_SET,l_len設(shè)置為0
總結(jié)
以上是生活随笔為你收集整理的linux u盘 uid pid,linux下的pid文件的作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器专用影子系统,试试最牛X的影子系统
- 下一篇: linux phpize