Ver Fonte

windows TerminateProcess

ithewei há 6 anos atrás
pai
commit
8af719db94
1 ficheiros alterados com 24 adições e 16 exclusões
  1. 24 16
      utils/hmain.cpp

+ 24 - 16
utils/hmain.cpp

@@ -386,7 +386,7 @@ int signal_init(procedure_t reload_fn, void* reload_userdata) {
 
 #elif defined(OS_WIN)
 // win32 use Event
-static HANDLE s_hEventTerm = NULL;
+//static HANDLE s_hEventTerm = NULL;
 static HANDLE s_hEventReload = NULL;
 
 #include <mmsystem.h>
@@ -394,7 +394,9 @@ static HANDLE s_hEventReload = NULL;
 #pragma comment(lib, "winmm.lib")
 #endif
 void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) {
-    DWORD ret = WaitForSingleObject(s_hEventTerm, 0);
+    DWORD ret;
+    /*
+    ret = WaitForSingleObject(s_hEventTerm, 0);
     if (ret == WAIT_OBJECT_0) {
         hlogi("pid=%d recv event [TERM]", getpid());
         if (getpid_from_pidfile() == getpid()) {
@@ -402,6 +404,7 @@ void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1,
             exit(0);
         }
     }
+    */
 
     ret = WaitForSingleObject(s_hEventReload, 0);
     if (ret == WAIT_OBJECT_0) {
@@ -413,8 +416,8 @@ void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1,
 }
 
 void signal_cleanup() {
-    CloseHandle(s_hEventTerm);
-    s_hEventTerm = NULL;
+    //CloseHandle(s_hEventTerm);
+    //s_hEventTerm = NULL;
     CloseHandle(s_hEventReload);
     s_hEventReload = NULL;
 }
@@ -424,8 +427,8 @@ int signal_init(procedure_t reload_fn, void* reload_userdata) {
     s_reload_userdata = reload_userdata;
 
     char eventname[MAX_PATH] = {0};
-    snprintf(eventname, sizeof(eventname), "%s_term_event", g_main_ctx.program_name);
-    s_hEventTerm = CreateEvent(NULL, FALSE, FALSE, eventname);
+    //snprintf(eventname, sizeof(eventname), "%s_term_event", g_main_ctx.program_name);
+    //s_hEventTerm = CreateEvent(NULL, FALSE, FALSE, eventname);
     //s_hEventTerm = OpenEvent(EVENT_ALL_ACCESS, FALSE, eventname);
     snprintf(eventname, sizeof(eventname), "%s_reload_event", g_main_ctx.program_name);
     s_hEventReload = CreateEvent(NULL, FALSE, FALSE, eventname);
@@ -437,6 +440,19 @@ int signal_init(procedure_t reload_fn, void* reload_userdata) {
 }
 #endif
 
+static void kill_proc(int pid) {
+#ifdef OS_UNIX
+    kill(pid, SIGNAL_TERMINATE);
+#else
+    //SetEvent(s_hEventTerm);
+    //sleep(1);
+    HANDLE hproc = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
+    if (hproc) {
+        TerminateProcess(hproc, 0);
+    }
+#endif
+}
+
 void handle_signal(const char* signal) {
     if (strcmp(signal, "start") == 0) {
         if (g_main_ctx.oldpid > 0) {
@@ -445,11 +461,7 @@ void handle_signal(const char* signal) {
         }
     } else if (strcmp(signal, "stop") == 0) {
         if (g_main_ctx.oldpid > 0) {
-#ifdef OS_UNIX
-            kill(g_main_ctx.oldpid, SIGNAL_TERMINATE);
-#else
-            SetEvent(s_hEventTerm);
-#endif
+            kill_proc(g_main_ctx.oldpid);
             printf("%s stop/waiting\n", g_main_ctx.program_name);
         } else {
             printf("%s is already stopped\n", g_main_ctx.program_name);
@@ -457,11 +469,7 @@ void handle_signal(const char* signal) {
         exit(0);
     } else if (strcmp(signal, "restart") == 0) {
         if (g_main_ctx.oldpid > 0) {
-#ifdef OS_UNIX
-            kill(g_main_ctx.oldpid, SIGNAL_TERMINATE);
-#else
-            SetEvent(s_hEventTerm);
-#endif
+            kill_proc(g_main_ctx.oldpid);
             printf("%s stop/waiting\n", g_main_ctx.program_name);
             msleep(1000);
         }