1. 程式人生 > >讓程序不被多次重複執行(linux程式設計小技巧)

讓程序不被多次重複執行(linux程式設計小技巧)

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