2010-10-09 81 views
0

我已經創建了一個使用C++並生成可執行文件的簡單應用程序。進程啓動限制

我想確保過程不能啓動兩次。如何執行流程/服務只啓動一次?

謝謝。

回答

1

編寫一個臨時文件並將其用作鎖。

編輯:要回答評論:如果你在Unix系統上,寫一個文件/ tmp/my_application_lock_file。如果它已經存在,請用適當的消息停止您的程序。在文件創建者退出時,刪除它。

#include <sys/stat.h> 
#include <errno.h> 
#include <unistd.h> 
#include <iostream> 
#include <fstream> 

int main (void) 
{ 
    struct stat file_info; 
    // test for lock file 
    if (stat("/tmp/my_application_lock", &file_info) == 0) { 
     std::cout << "My application is already running, will abort now..." << std::endl; 
     return -1; 
    } else { 
     // create lock file 
     std::ofstream out; 
     out.open("/tmp/my_application_lock"); 
     if (!out) { 
      std::cout << "Could not create lock file!" << std::endl; 
      return -1; 
     } 
     out << "locked" << std::endl; 
     out.close(); 
     // do some work 
     std::string s; 
     std::cin >> s; 
     // remove lock file 
     errno = 0; 
     if (unlink("/tmp/my_application_lock")) 
      std::cout << "Error: " << strerror(errno) << std::endl; 
    } 
    return 0; 
} 
+0

請您詳細說明一下嗎? – peterwkc 2010-10-09 16:31:13

+0

謝謝。你能提供一個例子嗎? – peterwkc 2010-10-10 02:22:05

+0

感謝你的例子。 – peterwkc 2010-10-12 10:47:24

2

什麼操作系統?在Windows上,執行此操作的典型方法是創建一個已命名的Mutex,因爲如果其他進程已使用該名稱創建了互斥鎖,則操作系統將爲您提供一個ERROR_ALREADY_EXISTS,並且操作系統將確保在進程結束時釋放該互斥鎖(即使它崩潰或死亡)。

+0

使用某個庫的便攜式方法如何?或在Linux操作系統上。 – peterwkc 2010-10-09 16:31:44

+0

你能提供一個例子嗎?謝謝 – peterwkc 2010-10-10 02:22:22