如何使電腦不會重複啟動同乙個程序

2021-09-20 15:02:32 字數 638 閱讀 8237

---讓程式不能被多次執行

---問題

(1)因為守護程序是長時間執行而不退出,因此./a.out執行一次就有乙個程序,執行多次就有多個程序。

(2)這樣並不是我們想要的。我們守護程序一般都是伺服器,伺服器程式只要執行乙個就夠了,多次同時執行並沒有意義甚至會帶來錯誤。

(3)因此我們希望我們的程式具有乙個單例執行的功能。意思就是說當我們./a.out去執行程式時,如果當前還沒有這個程式的程序執行則執行之,如果之前已經有乙個這個程式的程序在執行則本次執行直接退出(提示程式已經在執行)。

---實現方法:

(1)最常用的一種方法就是:用乙個檔案的存在與否來做標誌。具體做法是程式在執行之初去判斷乙個特定的檔案是否存在,若存在則標明程序已經在執行,若不存在則標明程序沒有在執行。然後執行程式時去建立這個檔案。當程式結束的時候去刪除這個檔案即可。

(2)這個特定檔案要古怪一點,確保不會湊巧真的在電腦中存在的。

}atexit(delete_file); // 註冊程序清理函式

int i = 0;

for (i=0; i<10; i++)

return 0;

}void delete_file(void)

celery 重複執行同乙個task

今天用celery 執行 task的時候碰到了 重複執行的情況,而且是重複執行了8次 電腦是8核的 谷歌了一下,celery 在執行task時有個機制,就是任務時長超過了 visibility timeout 時還沒執行完,就會指定其他worker重新開始task,預設的時長是一小時.但是我這個肯定...

如何同步共享同乙個list

例如多個執行緒要從同乙個list 中取物件,別的執行緒取了,其他執行緒則不可以再去這個物件.1.同步多執行緒 對 linklist 的removefirst 的操作或者 其他list 的remove 再get第乙個物件 的方法來實現.class sendsmstask implements runn...

同乙個系統中啟動多個tomcat

需要在同一系統裡啟動多個tomcat,應該怎麼處理?tomcat是個服務程式,需要占用幾個通訊埠,所以預設情況是不能啟動多個tomcat,如果要啟動多個tomcat,需要修改配置檔案,通過在配置檔案設定不同的通訊埠就可以做到.檔案 tomcat home conf server.xml 是tomca...