有一些程式在同一伺服器同一時間只能執行乙個,因此這樣的程式應該需要乙個排外的處理。當程式再次執行時,檢測到該程式已經執行了,那麼程式停止結束。
檔案和記錄鎖(fcntl()和f_setlk(設定記錄鎖))提供一種方法確保只有程式只被正在執行一次。如果每乙個程式對乙個固定的檔案進行加鎖(寫,只有這個鎖)。連續對該檔案追加記錄鎖會失敗,也意味著該程式正在被執行。這個記錄鎖是互斥的,如果乙個程式對檔案追加了記錄鎖,當這個程式結束時,這個記錄鎖就會被移除(無論是強制退出還是手動退出)。另外,向檔案寫入內容時,不要忘記了清空前次寫入的內容噢。
**如下所示:
#include #include #include #include #include #include #include #include #define lockfife "/var/run/daemon.pid"
/* 引數mode設定,只有在建立新檔案時才會有效
* s_irusr: 代表該檔案所有者具有可讀的許可權
* s_iwusr: 代表該檔案所有者具有可寫的許可權
* s_irgrp: 代表該檔案使用者組具有可讀的許可權
* s_iroth: 代表該其他使用者具有可讀的許可權 */
#define lockmode (s_irusr|s_iwusr|s_irgrp|s_iroth)
int lockfile(int fd)
int already_running(void)
if(lockfile(fd))
exit(1); }
/* 改變檔案大小,清空檔案 */
ftruncate(fd, 0);
/* 寫入程序號,可供管理員等檢視 */
sprintf(buf, "%ld", (long)getpid());
write(fd, buf, strlen(buf)+1);
return 0;}
int main(int argc, char *argv)
while(1)
return 0;
}
重新啟動Linux 下oracle 資料
1 重啟伺服器 reboot 2 以oracle身份登入資料庫,命令 su oracle 3 進入sqlplus控制台,命令 sqlplus nolog 4 以系統管理員登入,命令 connect as sysdba 5 啟動資料庫,命令 startup 6 如果是關閉資料庫,命令 shutdown...
VC實現程式重新啟動
重啟程式 如下 process information info startupinfo startup char szpath 128 char szcmdline bool bsucc createprocess szpath,szcmdline,null,null,false,normal p...
WINCE重新啟動
因為要在wince上面開發乙個系統,監測資料。長時間執行下去容易導致宕機。所以設定定時重啟。認真分析與查閱相關資料後,發現下面幾種方法 一 使用setsystempowerstate,通過測試後發現該方法重啟的效果並不理想,有點像windows的登出而不是斷電重啟。ifndef power stat...