This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-daemon.git


The following commit(s) were added to refs/heads/master by this push:
     new 879c151  [DAEMON-477] Detaches from console when the service stops 
(#307)
879c151 is described below

commit 879c1518a6ae63afdce748be5fd3b59e721f05b0
Author: Alexander PinĨuk <[email protected]>
AuthorDate: Wed Feb 25 15:26:50 2026 +0300

    [DAEMON-477] Detaches from console when the service stops (#307)
---
 src/native/windows/apps/prunsrv/prunsrv.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/native/windows/apps/prunsrv/prunsrv.c 
b/src/native/windows/apps/prunsrv/prunsrv.c
index a26ef06..186444a 100644
--- a/src/native/windows/apps/prunsrv/prunsrv.c
+++ b/src/native/windows/apps/prunsrv/prunsrv.c
@@ -1999,8 +1999,17 @@ void WINAPI serviceMain(DWORD argc, LPTSTR *argv)
         apxLogWrite(APXLOG_MARK_DEBUG "Waiting %d milliseconds for all threads 
to exit.", timeout);
         reportServiceStatus(SERVICE_STOP_PENDING, NO_ERROR, 
ONE_MINUTE_AS_MILLIS);
         if (!apxDestroyJvm(timeout)) {
-            /* if we are not using JAVA apxDestroyJvm does nothing, check the 
chid processes in case they hang */
+            /* if we are not using JAVA apxDestroyJvm does nothing */
             apxLogWrite(APXLOG_MARK_DEBUG "apxDestroyJvm did nothing or 
failed");
+            /* detach service process from console */
+            if (GetConsoleWindow() != NULL) {
+                apxLogWrite(APXLOG_MARK_DEBUG "Detaching service from 
console");
+                if (FreeConsole())
+                    apxLogWrite(APXLOG_MARK_DEBUG "Service detached from 
console");
+                else
+                    apxLogWrite(APXLOG_MARK_ERROR "Failed to detach service 
from console");
+            }
+            /* check the chid processes in case they hang */
             for (;;) {
                 if (!apxProcessTerminateChild( GetCurrentProcessId(), TRUE)) {
                     /* Just print the children processes once for debugging */

Reply via email to