Stopping a Service

springboot项目启动stopping service tomcat进程结束报错:Stopping service [Tomcat] 进程已结束,退出代码为 0...如何解决? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。 阅读详情

Stopping a Service

A service can be stopped with the ControlService function by sending a SERVICE_CONTROL_STOP request. If the SCM receives a SERVICE_CONTROL_STOP request for a service, it instructs the service to stop by forwarding the request to the service's ServiceMain function. However, if the SCM determines that other running services are dependent on the specified service, it will not forward the stop request. Instead, it returns ERROR_DEPENDENT_SERVICES_RUNNING. Therefore, to programmatically stop such a service, you must first enumerate and stop its dependent services.

If a service accepts the SERVICE_CONTROL_STOP control code, it must stop upon receipt, going to either the SERVICE_STOP_PENDING or SERVICE_STOPPED state. After the SCM sends this control code, it will not send other control codes.

Windows XP/2000:  If the service returns NO_ERROR and continues to run, it continues to receive control codes. This behavior changed starting with Windows Server 2003 and Windows XP SP2.

The following code implements a StopService function, which optionally attempts to stop the specified service's dependent services.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

// This function attempts to stop a service. It allows the caller to 
// specify whether dependent services should also be stopped. It also 
// accepts a timeout value, to prevent a scenario in which a service 
// shutdown hangs, then the application stopping the service hangs.
// 
// Parameters:   
//   hSCM - Handle to the service control manager.
//   hService - Handle to the service to be stopped.
//   fStopDependencies - Indicates whether to stop dependent services.
//   dwTimeout - maximum time (in milliseconds) to wait
// 
// If the operation is successful, returns ERROR_SUCCESS. Otherwise, 
// returns a system error code.

DWORD StopService( SC_HANDLE hSCM, SC_HANDLE hService, 
      BOOL fStopDependencies, DWORD dwTimeout ) 
{
   SERVICE_STATUS ss;
   DWORD dwStartTime = GetTickCount();
   DWORD dwBytesNeeded;

   // Make sure the service is not already stopped
   if ( !QueryServiceStatusEx( 
             hService, 
             SC_STATUS_PROCESS_INFO,
             &ss, 
             sizeof(STATUS_PROCESS_INFO),
             &dwBytesNeeded ) )
      return GetLastError();

   if ( ss.dwCurrentState == SERVICE_STOPPED ) 
      return ERROR_SUCCESS;

   // If a stop is pending, just wait for it
   while ( ss.dwCurrentState == SERVICE_STOP_PENDING ) 
   {
      Sleep( ss.dwWaitHint );
   if ( !QueryServiceStatusEx( 
             hService, 
             SC_STATUS_PROCESS_INFO,
             &ss, 
             sizeof(STATUS_PROCESS_INFO),
             &dwBytesNeeded ) )
         return GetLastError();

      if ( ss.dwCurrentState == SERVICE_STOPPED )
         return ERROR_SUCCESS;

      if ( GetTickCount() - dwStartTime > dwTimeout )
         return ERROR_TIMEOUT;
   }

   // If the service is running, dependencies must be stopped first
   if ( fStopDependencies ) 
   {
      DWORD i;
      DWORD dwBytesNeeded;
      DWORD dwCount;

      LPENUM_SERVICE_STATUS   lpDependencies = NULL;
      ENUM_SERVICE_STATUS     ess;
      SC_HANDLE               hDepService;

      // Pass a zero-length buffer to get the required buffer size
      if ( EnumDependentServices( hService, SERVICE_ACTIVE, 
         lpDependencies, 0, &dwBytesNeeded, &dwCount ) ) 
      {
         // If the Enum call succeeds, then there are no dependent
         // services so do nothing
      } 
      else 
      {
         if ( GetLastError() != ERROR_MORE_DATA )
            return GetLastError(); // Unexpected error

         // Allocate a buffer for the dependencies
         lpDependencies = (LPENUM_SERVICE_STATUS) HeapAlloc( 
               GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytesNeeded );

         if ( !lpDependencies )
            return GetLastError();

         __try {
            // Enumerate the dependencies
            if ( !EnumDependentServices( hService, SERVICE_ACTIVE, 
                  lpDependencies, dwBytesNeeded, &dwBytesNeeded,
                  &dwCount ) )
               return GetLastError();

            for ( i = 0; i < dwCount; i++ ) 
            {
               ess = *(lpDependencies + i);

               // Open the service
               hDepService = OpenService( hSCM, ess.lpServiceName, 
                     SERVICE_STOP | SERVICE_QUERY_STATUS );
               if ( !hDepService )
                  return GetLastError();

               __try {
                   // Send a stop code
                  if ( !ControlService( hDepService, 
                           SERVICE_CONTROL_STOP,
                           &ss ) )
                     return GetLastError();

                  // Wait for the service to stop
                  while ( ss.dwCurrentState != SERVICE_STOPPED ) 
                  {
                     Sleep( ss.dwWaitHint );
                     if ( !QueryServiceStatusEx( 
                              hDepService, 
                              SC_STATUS_PROCESS_INFO,
                              &ss, 
                              sizeof(STATUS_PROCESS_INFO),
                              &dwBytesNeeded ) )
                        return GetLastError();

                     if ( ss.dwCurrentState == SERVICE_STOPPED )
                        break;

                     if ( GetTickCount() - dwStartTime > dwTimeout )
                        return ERROR_TIMEOUT;
                  }

               } 
               __finally 
               {
                  // Always release the service handle
                  CloseServiceHandle( hDepService );

               }
            }

         } 
         __finally 
         {
            // Always free the enumeration buffer
            HeapFree( GetProcessHeap(), 0, lpDependencies );
         }
      } 
   }

   // Send a stop code to the main service
   if ( !ControlService( hService, SERVICE_CONTROL_STOP, &ss ) )
      return GetLastError();

   // Wait for the service to stop
   while ( ss.dwCurrentState != SERVICE_STOPPED ) 
   {
      Sleep( ss.dwWaitHint );
      if ( !QueryServiceStatusEx( 
               hService, 
               SC_STATUS_PROCESS_INFO,
               &ss, 
               sizeof(STATUS_PROCESS_INFO),
               &dwBytesNeeded ) )
         return GetLastError();

      if ( ss.dwCurrentState == SERVICE_STOPPED )
         break;

      if ( GetTickCount() - dwStartTime > dwTimeout )
         return ERROR_TIMEOUT;
   }

   // Return success
   return ERROR_SUCCESS;
}

// Helper function to display an error message 

void DisplayError( LPTSTR szAPI, DWORD dwError ) 
{
   LPTSTR lpBuffer = NULL;

   FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
         FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError,
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
         (LPTSTR) &lpBuffer, 0, NULL );

   _tprintf( TEXT("%s failed:/n"), szAPI );
   _tprintf( TEXT("    error code = %u/n"), dwError );
   _tprintf( TEXT("    message    = %s/n"), lpBuffer );

   LocalFree( lpBuffer );
}

// Entry point for the program. This function contains sample code 
// demonstrating how to use the StopService function implemented 
// above.
// 
// Parameters:   
//   argc - the number of command-line arguments
//   argv[] - an array of command-line arguments

void _tmain( int argc, TCHAR *argv[] ) 
{
   SC_HANDLE hSCM;
   SC_HANDLE hService;
   DWORD     dwError;

   if ( argc < 2 ) 
   {
      _tprintf( TEXT("usage: /"%s/" <ServiceName>/n"), argv[0] );
      return;
   }

   __try 
   {
      // Open the SCM database
      hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_CONNECT );
      if ( !hSCM ) 
      {
         DisplayError( TEXT("OpenSCManager()"), GetLastError() );
         __leave;
      }

      // Open the specified service
      hService = OpenService( hSCM, argv[1], SERVICE_STOP
            | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS );
      if ( !hService ) 
      {
         DisplayError( TEXT("OpenService()"), GetLastError() );
         __leave;
      }

      // Try to stop the service, specifying a 30 second timeout
      dwError = StopService( hSCM, hService, TRUE, 30000 ) ;
      if ( dwError == ERROR_SUCCESS )
         _tprintf( TEXT("Service stopped./n") );
      else
         DisplayError( TEXT("StopService()"), dwError );

   } 
   __finally 
   {
      if ( hService )
         CloseServiceHandle( hService );

      if ( hSCM )
         CloseServiceHandle( hSCM );
   }
}
CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式 由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。 阅读详情

相关推荐

外设高级定时器互补输出带死区控制实验

外设高级定时器互补输出带死区控制实验

ff_juju的博客 1654

使用nssm管理tomcat服务操作步骤

问题背景:近日生产环境中的tomcat服务崩溃,导致系统不可用。于是提出了使用nssm来管理tomcat服务,即nssm服务为tomcat的守护线程,当tomcat服务崩溃停止之后,nssm服务会马上重启tomcat服务,当然这个重启的时间可以设置。 操作步骤: 1.目前生产上使用的是解压版的tomcat服务,所以先要注册tomcat服务。使用cmd命令进入bin目录,然后输入以下命令:service.bat install serviceName. 其中serviceName可以不用写,那么就用的默认

hoho_12 1542

STM32平台中ARM架构向量表配置:手把手教程

深入讲解STM32平台下arm架构的向量表配置方法,结合实际操作步骤,帮助开发者掌握中断向量的定位与初始化,提升嵌入式系统开发效率。

weixin_42514540的博客 802

python方法报错使程序停止,使用Python写Windows Service服务程序

1.背景如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装。2.实例#encoding=utf-8importwin32serviceutilimportwin32serviceimportwin32eventimportosimportl...

weixin_39675513的博客 625

智能车竞赛轮腿穿越组:GPS+IMU导航绕桩实战技巧(附避坑指南)

本文详细介绍了智能车竞赛轮腿穿越组中GPS+IMU导航绕桩的实战技巧,包括硬件选型、传感器标定、路径规划及多传感器数据融合策略。通过实际案例和避坑指南,帮助参赛队伍提升导航精度和稳定性,避免常见错误。特别强调IMU安装位置和标定对导航系统的重要性。

gin88的博客 585

山东大学软件学院计算机组成原理课程设计实验二

文章目录一、实验时间二、实验内容1.设计异步模16加1计数器2.设计4位移位器3.超前进位16位ALU的设计 一、实验时间 2021年4月1日星期四,第五周 二、实验内容 1.设计异步模16加1计数器 基本功能:使用D触发器(dff元件)和异或门构建从0开始计数的模16加1计数器 对应的电路图(这里已经实现了预置初值的功能) 拓展功能: (1)实现模256加1计数器 (2)实现计数器预置初值的功能 这里复用了上面的模16加1计数器 这里异步触发器预置初值的功能是这样实现的: (1)首先将CLR端调为0,

叶卡捷琳堡的博客 5254

git 拉新项目_Git子模块。拉入超级项目的新克隆

OK. So I thought I had this licked ... but now ....I have a project which includes one small library from GitHub as a submodule. In the original version of that super-project the submodule is working ...

weixin_30699957的博客 302

OpenClaw实战-行政与HR必备:AI驱动的办公自动化

智能会议纪要自动生成会议时间智能协调自动提醒和跟进简历智能筛选和匹配度分析面试安排自动化入职办理流程化通知公告一键发布发票识别和报销辅助资产管理数字化让AI处理繁杂的事务性工作,让您有更多时间专注于更有价值的战略和管理任务。

gaoxiang_120的专栏 220

gogs git NSSM 安装弹窗配置

Use NSSM Get thenssm.exeneeded for your machine (32 or 64 bit; they’re packaged together in Iain’s zip file), and place it in a directory that is in (or will be added to) your%PATH%environment va...

chenya866的专栏 6255

135、转动惯量辨识方法

<think>我们要求根据内容生成≤150字的文章摘要。内容是关于电机控制中转动惯量辨识的方法和工程经验。摘要需简洁概括核心:转动惯量重要性、三种方法(加减速法、正弦扫频、MRAS)、工程注意点(摩擦补偿、采样同步等)、实用建议(组合使用、滤波限幅、安全保护)。字数严格≤150。需要提炼。</think>转动惯量辨识是电机控制的关键,负载变化会导致速度环失稳。工程常用加减速法(简单可靠)、正弦扫频法(高精度)、MRAS在线辨识。实操需补偿摩擦、同步采样、控制激励幅度。建议混合使用,辨识结果需滤波限幅,并设置

2401_88858637的博客 40

GEE生物量预测:利用多源遥感数据和随机森林算法RF构建地上生物量(AGB)预测模型,并实现未来年份的生态变化模拟(大面积生物量反演)

数据融合策略:整合5类遥感产品(AGB、NDVI、LAI、土地覆盖、地形)时序特征构建:采用生长季中值法降低云污染影响机器学习优化分层采样保证数据代表性80棵决策树平衡精度与效率预测可靠性基准期R²达0.76需结合地面实测数据校正。

此星光明博客 419

Android Service系列(十一)starting Service 以及stopping a service

Starting a service You can start a service from an activity or other application component by passing anIntenttostartService()orstartForegroundService(). The Android system calls the service'so...

perfectnihil的博客 857

基于Python的Steam游戏评论与销量数据爬取及预测分析

随着数字游戏市场的蓬勃发展,Steam作为全球最大的数字游戏分发平台,积累了海量的游戏数据与玩家行为数据。本文旨在通过Python网络爬虫技术,采集Steam平台的游戏基本信息、玩家评论数据及销量相关信息,为后续的游戏评论情感分析与销量预测模型构建提供数据支持。本文将详细介绍使用requestsselenium等库实现Steam数据爬取的全过程,并提供完整的代码实现与数据处理方法。关键词:Steam;Python爬虫;数据采集;评论分析;销量预测。

2201_76125261的博客 855

spring boot 启动报错o.a.c.c.StandardService.log: Stopping service [Tomcat]

分析问题:出在Feign调用 这行代码上,加上就报上面的错。就是@Autowired的问题。 解决方法:折磨的一晚上,原因是这个,原来写成 Public String loginTest(String id,String pwd);的问题FeignClient注册的接口方法中参数取值不能像普通那样,需要通过@RequestParam字符参数,@RequestBody 传递对象,比如@Req...

qq_37123333的博客 5824

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring Boot启动的报错 Stopping service [Tomcat]

我遇到的问题是项目中使用java_websocket的WebSocketClient,由于性能要求,需要再Controller直接继承WebSocketClient, 在项目启动过程中调试进入springboot框架,大概意思说onClose被识别为内部方法,造循环依赖等问题,具体没去深究,相关错误关键字如下 Eagerly caching bean to allow for res...

weixin_30399155的博客 378

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Stopping service [Tomcat] Disconnected from the target VM, address:XXXXXX解决方案

Stopping service [Tomcat] Disconnected from the target VM, address:XXXXXX解决方案

runwuwushengxiyu的博客 255

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

org.apache.catalina.core.StandardService - Stopping service [Tomcat]问题解决思路

背景介绍 接手了一个老系统 之前启动正常的,忽然启动不了了 由于线上生产服务器出现了一点问题,导致一些服务需要重启,也包括这次启动报错的 jar 包。 首先要说明一下,这个 jar 包之前是一直正常运行的,只是刚刚重启的时候报错了,所以当时也非常意外,启动之后我没看日志,因为我认为肯定没问题的,谁知道还是访问不到,于是就赶紧去查日志,也就发现了文章标题的这个错误: 重复试了几次都是相同的问题...

程序员有故事 6074

spring boot报Stopping service [Tomcat]

D:\software\Java8\jdk1.8.0_144\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53645,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.m...

愤怒的苹果ext的博客 3万+

如何停止处于stopping状态的windows service(SC)

测试过程中,需要启动和停止windows service,有时候会出现服务处于stopping或者starting的状态,但是,在services界面中,start service/stop service已经处于灰色不可操作状态,用命令行的形式net start/stop servicename也无济于事。停止服务的方法就是关掉这个进程,但是很多时候无法确定是哪个进程与之相关。在命令行...

932

Warning Stopping docker.service, but it can still be activated by docker.socket

目录 问题描述 Warning: Stopping docker.service, but it can still be activated by: docker.socket 原因 解释 解决方案一 解决方案二 总结 问题描述 使用docker时, 每次停止docker systemctl stop docker 命令执行完都会提示 Warning: Stopping docker.service, but it can still be activated

m0_67394002的博客 2906

springboot启动出现 Stopping service [Tomcat]

今天在做项目的时候使用的是 ehcache 缓存,之前项目可以正常的进行启动, 但是我再加了这个功能之后在项目显示启动成功之后,在输出界面又会显示 Stopping service [Tomcat] 在网上百度,查找原因有: 1.数据库地址,使用ip地址,(生产环境使用的是域名) 2.日志没有统一为,slf4j(Tomcat默认使用的是 common-log,Spring使用的是logb...

yang_zzu的博客 5342

spring boot 2 内嵌Tomcat 抛出异常 “Stopping service [Tomcat]”

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34127717的博客 426

spring boot报Stopping service

spring boot报Stopping service

qq_53666104的博客 1080

Stopping service [Tomcat]

今天遇到个这个错误,报错就是application容器没有启动起来。 首先是在git上当下来代码,然后等maven自动下载资源包,等下载完毕,成功导入之后,程序一启动就出问题了。上面的错误出现了。 解决办法: 我的这个只是其中之一,我尝试了好多办法最终这个办法成功了。我把项目重新下载maven重新下载,启动成功了。 我的这个错误原因就是包的问题,不知道那些包由于某些原因没有下载下载下来,或者下载下...

weixin_40583191的博客 1490
上一篇: Starting a Service
下一篇: Sending Control Requests to a Service
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值