Linux下防止程式重新啟動

2021-08-23 12:00:04 字數 1034 閱讀 2766

有一些程式在同一伺服器同一時間只能執行乙個,因此這樣的程式應該需要乙個排外的處理。當程式再次執行時,檢測到該程式已經執行了,那麼程式停止結束。

檔案和記錄鎖(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...