[ https://issues.apache.org/jira/browse/DAEMON-366?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16062098#comment-16062098 ]
Consultant Leon commented on DAEMON-366: ---------------------------------------- Firstly I've now managed to resolve the shutdown problem by fixing our application and ensure it properly terminates all threads - this is confirmed as one solution. Secondly I'm not sure what the best behaviour should be for procrun when a process does not behave so I created the debug log to help you to determine if this is really a 1.0.15 procrun issue as well. I do not see the 'waiting 1 minute message'. So I reinstalled the service with option --LogLevel=Debug Then perform sc stop TestC (TestC is the name of my service at this point) Once I shutdown I see our own application log: 2017-06-24_20:43:07.711- INFO-[FileExportDestination-HelloWorld.OutputDest]-rename/move temporary file ... 2017-06-24_20:43:07.711- INFO-[FileExportDestination-HelloWorld.OutputDest]-consume done [FileSource_15cdb6a2ca3_1], status=PROCESSING 2017-06-24_20:43:54.466- INFO-[Thread-3 ]-Stopping APP service 'TestC'... 2017-06-24_20:43:54.466- INFO-[Thread-3 ]-HelloWorld-SYSTEM: pause all sources configured with pause.before.shutdown=true, request remaining sources to stop 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-HelloWorld-SYSTEM: all sources set to pause 'before shutdown' have now paused, other sources have stopped 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-HelloWorld-SYSTEM: wait max 30 seconds for queues to flush 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-HelloWorld-SYSTEM: all queues are flushed 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-HelloWorld-SYSTEM: pause all components configured with pause.on.shutdown=true... 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-HelloWorld-SYSTEM: all components set to pause 'on shutdown' have now paused 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-ServiceResponder: close service connection 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-all services stopped timely 2017-06-24_20:43:54.482- INFO-[Thread-3 ]-APP service 'TestC' stopped. So at 20:43:54.482 the main java application shutdown is complete. I then run jstack -F <pid> and see many threads left running indeed: $ sc queryex TestC SERVICE_NAME: TestC TYPE : 10 WIN32_OWN_PROCESS STATE : 3 STOP_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x3 WAIT_HINT : 0x493e0 PID : 11088 FLAGS : > D:\app_home\app-2.0.0.0.0-5145\etc $ jstack -F 11088 Then now a good 20 minutes later the service is still in STATE STOP_PENDING: The only other logs are from the proc daemon: commons-daemon.2017-06-24.log [2017-06-24 20:40:38] [debug] ( prunsrv.c:1679) [10484] Commons Daemon procrun log initialized [2017-06-24 20:40:38] [info] ( prunsrv.c:1683) [10484] Commons Daemon procrun (1.0.15.0 64-bit) started [2017-06-24 20:40:38] [debug] ( prunsrv.c:561 ) [10484] Installing service... [2017-06-24 20:40:38] [info] ( prunsrv.c:600 ) [10484] Service TestC name TestC [2017-06-24 20:40:38] [debug] ( prunsrv.c:616 ) [10484] Setting service description FusionFabric Connect (D:\APP_home\APP-2.0.0.0.0-5145\config\samples\HelloWorld) [2017-06-24 20:40:38] [info] ( prunsrv.c:634 ) [10484] Service 'TestC' installed [2017-06-24 20:40:38] [info] ( prunsrv.c:1764) [10484] Commons Daemon procrun finished [2017-06-24 20:40:55] [debug] ( prunsrv.c:1679) [ 7180] Commons Daemon procrun log initialized [2017-06-24 20:40:55] [info] ( prunsrv.c:1683) [ 7180] Commons Daemon procrun (1.0.15.0 64-bit) started [2017-06-24 20:40:55] [info] ( prunsrv.c:1596) [ 7180] Running 'TestC' Service... [2017-06-24 20:40:55] [debug] ( prunsrv.c:1374) [ 8884] Inside ServiceMain... [2017-06-24 20:40:55] [debug] ( prunsrv.c:844 ) [ 8884] reportServiceStatusE: 2, 0, 3000, 0 [2017-06-24 20:40:55] [info] ( prunsrv.c:1127) [ 8884] Starting service... [2017-06-24 20:40:55] [debug] ( javajni.c:233 ) [ 8884] loading jvm 'C:\Program Files\Java\jdk1.8.0_73\jre\bin\server\jvm.dll' [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[0] -XX:+UseConcMarkSweepGC [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[1] -XX:MaxGCPauseMillis=2000 [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[2] -XX:GCTimeRatio=10 [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[3] -XX:+CMSIncrementalMode [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[4] -XX:+CMSIncrementalPacing [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[5] -XX:+DisableExplicitGC [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[6] -DAPP.LOG_DIR=D:\APP_home\APP-2.0.0.0.0-5145\config\samples\HelloWorld\logs [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[7] -DAPP.DATA_DIR=D:\APP_home\APP-2.0.0.0.0-5145\config\samples\HelloWorld\data [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[8] -Djava.class.path=.;D:\APP_home\APP-2.0.0.0.0-5145\bin\APP-api-2.0.0-00_00-RELEASE.jar;... [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[9] exit [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[10] -Xms512m [2017-06-24 20:40:55] [debug] ( javajni.c:704 ) [ 2824] Jvm Option[11] -Xmx8192m [2017-06-24 20:40:55] [debug] ( javajni.c:888 ) [ 2824] argv[0] = TestC [2017-06-24 20:40:55] [debug] ( javajni.c:888 ) [ 2824] argv[1] = D:\APP_home\APP-2.0.0.0.0-5145\config\samples\HelloWorld\logs [2017-06-24 20:40:55] [debug] ( javajni.c:888 ) [ 2824] argv[2] = director.properties [2017-06-24 20:40:55] [debug] ( javajni.c:941 ) [ 2824] Java Worker thread started com/COMPANY/tools/integration/director/WindowsServiceWrapper:start [2017-06-24 20:40:56] [debug] ( prunsrv.c:1186) [ 8884] Java started com/COMPANY/tools/integration/director/WindowsServiceWrapper [2017-06-24 20:40:56] [info] ( prunsrv.c:1284) [ 8884] Service started in 1453 ms. [2017-06-24 20:40:56] [debug] ( prunsrv.c:844 ) [ 8884] reportServiceStatusE: 4, 0, 0, 0 [2017-06-24 20:40:56] [debug] ( prunsrv.c:1528) [ 8884] Waiting for worker to finish... [2017-06-24 20:40:58] [debug] ( javajni.c:964 ) [ 2824] Java Worker thread finished com/COMPANY/tools/integration/director/WindowsServiceWrapper:start with status=0 [2017-06-24 20:40:58] [debug] ( prunsrv.c:1533) [ 8884] Worker finished. [2017-06-24 20:40:58] [debug] ( prunsrv.c:1559) [ 8884] Waiting for all threads to exit [2017-06-24 20:43:54] [debug] ( prunsrv.c:844 ) [ 7180] reportServiceStatusE: 3, 0, 3000, 0 [2017-06-24 20:43:54] [info] ( prunsrv.c:943 ) [10688] Stopping service... [2017-06-24 20:43:54] [debug] ( javajni.c:888 ) [ 9936] argv[0] = TestC [2017-06-24 20:43:54] [debug] ( javajni.c:941 ) [ 9936] Java Worker thread started com/COMPANY/tools/integration/director/WindowsServiceWrapper:stop [2017-06-24 20:43:54] [debug] ( javajni.c:964 ) [ 9936] Java Worker thread finished com/COMPANY/tools/integration/director/WindowsServiceWrapper:stop with status=0 [2017-06-24 20:43:55] [debug] ( prunsrv.c:990 ) [10688] Waiting for java jni stop worker to finish... [2017-06-24 20:43:55] [debug] ( prunsrv.c:992 ) [10688] Java jni stop worker finished. [2017-06-24 20:43:55] [debug] ( prunsrv.c:844 ) [10688] reportServiceStatusE: 3, 0, 300000, 0 [2017-06-24 20:43:55] [debug] ( prunsrv.c:1093) [10688] Waiting for worker to die naturally... [2017-06-24 20:43:55] [debug] ( prunsrv.c:1104) [10688] Worker finished gracefully in 0 ms. [2017-06-24 20:43:55] [info] ( prunsrv.c:1114) [10688] Service stop thread completed. So you see that prunsrv.c reports stop thread completed while the process is still running with pid 11088 !screenshot-1.png! > Windows service fails to stop with error code 1053 (using Windows 7 service > manager) > ------------------------------------------------------------------------------------ > > Key: DAEMON-366 > URL: https://issues.apache.org/jira/browse/DAEMON-366 > Project: Commons Daemon > Issue Type: Bug > Components: Procrun > Affects Versions: 1.0.15 > Environment: Windows 7 64bit - using 64-bit prunsrv.exe in jvm mode > Using 64-bit Java JRE 1.8.0_73 > Reporter: Consultant Leon > Assignee: Guillaume Chauvet > Labels: prunsrv, stop, windows > Attachments: screenshot-1.png > > > Using Windows services manager (services.msc) to start/stop service. > Service installed with the following start/stop settings. > --StartMode=jvm --StartClass=com.myorg.MyClass --StartMethod=start > --StopMode=jvm --StopClass=com.myorg.MyClass --StopMethod=stop > Service starts OK. > When I use services manager to stop the service, the application stops > running but the prunsrv.exe process does not terminate. > Eventually the services manager reports that: > "Windows could not stop the <MyServiceName> service on Local Computer. Error > 1053: The service did not respond to the start or control request in a timely > fashion." > The service then stays at status "stopping" & cannot be restarted without > first killing the prunsrv.exe process. > Looking at the application logs I can see that the application's stop() > method gets called - the final line in this method is a logging call which is > executing OK. > The commons-daemon-<date>.log file has the following entries: > [2013-05-09 17:18:02] [info] [10944] Commons Daemon procrun (1.0.15.0 > 32-bit) started > [2013-05-09 17:18:02] [info] [10944] Running '<MyServiceName>' Service... > [2013-05-09 17:18:02] [info] [ 9224] Starting service... > [2013-05-09 17:18:11] [info] [ 9224] Service started in 9202 ms. > [2013-05-09 17:18:23] [info] [10780] Stopping service... > [2013-05-09 17:18:24] [info] [10780] Service stop thread completed. > This problem does not occur in daemon versions 11->14. > I have only seen it in daemon-1.0.15 -- This message was sent by Atlassian JIRA (v6.4.14#64029)