Ads 468x60px

##EasyReadMore##

29 4月, 2016

[C\C++] 結束程式的安全機制 Safely Shutdown

當對程式下 kill -15 PID 或 Ctrl + C 時
為什麼會下 15 ?請輸入指令查詢 kill -l
若程式還在寫入檔案
此時中斷會發生不可預期的錯誤

解法:
  攔截訊號並做退出機制

程式:
  1. #include <iostream>  
  2. #include <csignal>  
  3. #include <stdlib.h>  
  4.   
  5. //define for status types  
  6. #define Normal (0)  
  7. #define Shutdown (-1)  
  8.   
  9. using namespace std;  
  10.   
  11. static short status;  
  12.   
  13. void signalHandler( int signum )  
  14. {     
  15.     cout << "Interrupt signal (" << signum << ") received"<<endl;  
  16.     cout << "Set status to shutdown"<<endl;  
  17.     status = Shutdown;  
  18. }  
  19.   
  20. int main ()  
  21. {  
  22.     // initialize status  
  23.     status = Normal;  
  24.     // register signal SIGINT and signal handler    
  25.     signal(SIGTERM, signalHandler);    
  26.   
  27.     while(1){  
  28.         //check point  
  29.        if(status == Shutdown) {  
  30.            cout << "status is Shutdown, do something before shutdown."<<endl;  
  31.            //do something before shutdown  
  32.            cout << "All done, ready to be terminated"<<endl;  
  33.            exit(0);  
  34.        }  
  35.          
  36.        cout << "Do routine" << endl;  
  37.        sleep(1);  
  38.     }  
  39.     return 0;  
  40. }  

0 意見:

張貼留言

 
Blogger Templates