讓程序不被多次重複執行(linux程式設計小技巧)
阿新 • • 發佈:2019-02-09
---讓程式不能被多次執行
---問題
(1)因為守護程序是長時間執行而不退出,因此./a.out執行一次就有一個程序,執行多次就有多個程序。
(2)這樣並不是我們想要的。我們守護程序一般都是伺服器,伺服器程式只要執行一個就夠了,多次同時執行並沒有意義甚至會帶來錯誤。
(3)因此我們希望我們的程式具有一個單例執行的功能。意思就是說當我們./a.out去執行程式時,如果當前還沒有這個程式的程序執行則執行之,如果之前已經有一個這個程式的程序在執行則本次執行直接退出(提示程式已經在執行)。
---實現方法:
(1)最常用的一種方法就是:用一個檔案的存在與否來做標誌。具體做法是程式在執行之初去判斷一個特定的檔案是否存在,若存在則標明程序已經在執行,若不存在則標明程序沒有在執行。然後執行程式時去建立這個檔案。當程式結束的時候去刪除這個檔案即可。
(2)這個特定檔案要古怪一點,確保不會湊巧真的在電腦中存在的。
int main(void)
{
// 程式執行之初,先去判斷檔案是否存在
int fd =-1;
fd = open(FILE, O_RDWR | O_TRUNC | O_CREAT | O_EXCL,0664);
if(fd <0)
{
if(errno == EEXIST)
{
printf("程序已經存在,並不要重複執行\n");
return-1;
}
}
atexit(delete_file);// 註冊程序清理函式
int i =0;
for(i=0; i<10; i++)
{
printf("I am running...%d\n", i);
sleep(1);
}
return0;
}
void delete_file
{
remove(FILE);
}