精华内容
下载资源
问答
  • public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) ... _logger = logger;... protected override async Task ExecuteAsync...
  • 蒙OS开源代码精要解读之—— 系统服务框架子系统(服务启动) 作者介绍: 中科创达OpenHarmony研究组 说明: 中科创达OpenHarmony研究组第一时间对https://codechina.csdn.net/openharmony上开源的代码进行了详尽...

    鸿蒙OS开源代码精要解读之—— 系统服务框架子系统(服务启动)

    作者介绍

    中科创达OpenHarmony研究组

    说明

    中科创达OpenHarmony研究组第一时间对https://codechina.csdn.net/openharmony上开源的代码进行了详尽的代码研读和学习。为此,我们打算编写一系列篇幅中等,内容精炼的源码分析文章来引领大家更进一步的走进鸿蒙OS。随着对代码的了解,广大开发者想亲自动手参与的意愿和信心也会随之增强——这也是鸿蒙OS开源的意义所在。

    本篇内容摘要:

    Samgr模块提供了面向服务体系结构(SOA)的开发框架基础,提供了Servcie、Feature和Founction的基本模型,以及注册和发现功能。是鸿蒙Framework非常重要的部分。系统中基于Samgr开发了许多服务,如Broadcast service, Bootstrap Servcie等,用户也可以基于Samgr开发框架开发自己的Service。

    本篇介绍了OpenHarmony服务按序注册和启动的流程。

    主要结构体

     

    关键成员说明:

    1. struct TaskConfig:在注册Service时提供,描述了Servcie对应的task的优先级,栈等信息

    2. struct TaskPool:初始化Service时生成

    • queueId:创建taskpool时生成,通过不同的queueId来向不同的Servcie task发送消息

    3. struct Service:要注册的Servcie,用户需要实现如下四个函数:

    • GetName:返回Servcie名称
    • Initialize:Servcie初始化函数,一般是要保存Service初始化生成的身份信息用于后续收发消息
    • MessageHandle:信息处理函数
    • TaskConfig:返回Service对应的Task配置

    4. struct Operations:记录Servcie的时间戳等信息

    5. struct ServiceImpl:注册Servcie实际上注册的是ServiceImpl

    • Service *service:注册的Servcie
    • TaskPool *taskPool:初始化时申请的taskpool
    • Vector features:Service下的子feature
    • int16 serviceId:serviceId的值为servcie在Vector中的位置,这个值在加载时就已经确定。
    • uint8 inited:初始化标志

    6. struct SamgrLiteImpl:全局只有一个SamgrLiteImpl g_samgrImpl。

    • BootStatus status:Service启动的状态,目前定义了以下状态值:
      • BOOT_SYS:将要启动系统Service
      • BOOT_SYS_WAIT:正在启动系统Service
      • BOOT_APP:将要启动APP Servcie
      • BOOT_APP_WAIT:正在启动APP Servcie
      • BOOT_DYNAMIC:将要启动Dynamic Servcie
      • BOOT_DYNAMIC_WAIT:正在启动Dynamic Service
    • Vector services:注册Servcie时将一个servcieImpl结构体追加到Vector末尾,用于后面的初始化

    启动流程

    下图Servcie注册的流程:

     

    1. 系统service使用SYS_SERVICE_INIT,SYS_FEATURE_INIT,用户Service使用APP_SERVICE_INIT,APP_FEATURE_INIT来注册服务,对于M核,把服务的注册函数放到指定的段,在启动时找到此段调用所有的函数。对于A核这个宏定义使用了__attribute__(constructor)的特性,这个特性在在程序加载后,程序执行之前执行注册函数

     

    2. 注册Servcie主要是把ServiceImpl追加到全局g_samgrImpl的成员services Vector,并根据Servcie在向量表中的序号来确定ServcieID。

     

    3. 注册Feature主要是把FeatureImpl追加到对应服务的的features Vector,并根据Feature在向量表中的序号来确定FeatureID

    下图是Service初始化流程:

     

    4. 服务初始化的入口是SAMGR_Bootstrap(foundation/distributedschedule/services/samgr_lite/samgr/samgr_lite.c),主要实现以下功能:

    a. 先更新全局g_samgrImpl的status:

    而Status有如下的枚举:

    那么更新的逻辑就是这样子了:

        如果status为BOOT_SYS == 0b,更新后是BOOT_SYS_WAIT == 1b;

        如果status为BOOT_APP == 10b,更新后是BOOT_APP_WAIT == 11b;

        如果status为BOOT_DYNAMIC == 100b,更新后是BOOT_DYNAMIC_WAIT == 101b;

        如果status为BOOT_SYS_WAIT == 1b; BOOT_APP_WAIT == 11b; BOOT_DYNAMIC_WAIT == 101b;更新后不变。

        g_samgrImpl的初始状态是BOOT_SYS,首次调用会更新为BOOT_SYS_WAIT

     

    b. 收集全局g_samgrImpl->servcies Vector中还没有被初始化,状态为SVC_INIT的servcie,一起初始化

    5. 为收集的每个Servcie创建TaskPool和创建消息队列。并拿到消息队列的句柄,以后向某个Servcie线程发送消息时就会发送给相应的队列。

    6. 将函数HandleInitRequest发送到消息队列,这个函数将会在Service线程创建启动后,在Service对应的线程中执行。如果没有申请到队列,或者没有申请到taskpool,就在当前线程中执行初始化操作

    7. 为每个申请到队列和taskpool的service创建和启动Task。

    下图是Task的执行流程

    Task循环执行以下内容:

        从消息队列中获取exchange并拿到ServiceImpl

        如果消息类型为MSG_ACK或者MSG_DIRECT,就执行exchange->handler函数,结合上一步,初始化时执行HandleInitRequest

        如果是其他类型(Request),则会调用Feature的 OnMessage或者Servcie的MessageHandle,然后再执行handler。

    8. Service task启动后会从队列中获取到HandleInitRequest并执行,主要做了以下的工作:

    • 调用service的Initialize和feature OnInitialize函数,并将初始化过程中的ServcieID,FeatureID,和QueueID作为参数传出,service一般会保存该ID用于以后身份鉴别。
    • 更新Servcie的状态为SVC_IDLE
    • 检查全局g_samgrImpl的services vector是否还有未初始化的servcie(如图,pose >= size,则表示Service已经全部初始化完成),如果都完成了就更新status到下一个状态,并给Bootstrap服务发送消息告知此阶段初始化已完成

    9. Bootstrap服务收到消息后就会加载下一阶段的程序。如果此时sys service已经完成,将会加载app

    10. 用户Service使用APP_SERVICE_INIT,APP_FEATURE_INIT注册app service到全局g_samgrImpl的services vector中

    11. SendBootRequest服务初始化入口SAMGR_Bootstrap作为handler传给bootstrap service,用户程序加载完成后bootstrap又会调用SAMGR_Bootstrap函数,返回第4步去初始化app servcie

    12. 以此类推,最终按顺序完成sys service, app service, dynamic的初始化。

    展开全文
  • Android 系统服务

    千次阅读 2016-08-22 15:25:54
    Android系统服务大致分为三大类:本地守护进程、Native系统服务和Java系统服务

    Android系统服务大致分为三大类:本地守护进程、Native系统服务和Java系统服务。如下图所示:
    这里写图片描述

    本地守护进程

    init进程根据init.rc文件中的定义,启动本地守护进程。这些进程会常驻在系统中,有的只会启动一次,有的如果退出了,还会被init启动。具体的启动方式就在init.rc中定义。
    下面大体列举几个守护进程及其功能。

    守护进程 功能
    vold 管理存储设备,自动安装存储设备,将设备分区格式化
    netd 管理蓝牙、wifi、usb等各种网络连接
    installd 负责安装及卸载软件包,确认软件包的完整性
    rild 接收来自于phone应用程序或其他客户端程序发出的调制解调控制请求,并传递给调制解调器
    adbd 提供可以调试Android的环境
    servicemanager binder通信大管家
    surfaceflinger 负责android系统的UI图形显示
    mediaserver 负责播放音频、视频,camera拍照录像

    Native系统服务

    由c++语言编写,运行在本地守护进程中。比如mediaserver守护进程中就包含AudioFlinger、MediaPlayerService、CameraService、AudioPolicyService和SoundTriggerHwService等服务。在
    mediaserver进程的main函数中,初始化这些服务的实例,代码如下:

    int main(int argc __unused, char** argv)
    {
        ...
        sp<ProcessState> proc(ProcessState::self());
        sp<IServiceManager> sm = defaultServiceManager();
        ALOGI("ServiceManager: %p", sm.get());
        AudioFlinger::instantiate();
        MediaPlayerService::instantiate();
        CameraService::instantiate();
        AudioPolicyService::instantiate();
        SoundTriggerHwService::instantiate();
        ...
        ProcessState::self()->startThreadPool();
        IPCThreadState::self()->joinThreadPool();
    }

    在所属进程初始化的时候会将Native系统服务注册到ServiceManager中。这样,其他的应用或服务就可以通过binder机制调用Native系统服务了。
    当然,我们也可以自己开发一个Native系统服务,实现其Binder接口,这样Native层的其他应用或服务就可以调用该服务了。
    如果我们开发的Native系统服务想提供给Java层应用使用,就需要实现一个Java接口,然后通过JNI调用Native系统服务。

    Java系统服务

    由Java语言编写,大部分运行在system_server进程中。每个系统服务都以线程的形态运行,等待应用程序发出的请求,然后对请求进程处理,再讲结果返回给应用程序。
    这部分系统服务又可以分为两种:Java核心系统服务和Java硬件系统服务。
    Java核心系统服务是Android系统正常运转的基础,包括大家所熟知的AMS、WMS、PMS等。
    Java硬件服务是为应用提供硬件控制服务,如电话服务、wifi服务、PowerManagerService等。

    下面罗列了运行在system_server中的系统服务,按字母排序。

    AccessibilityManagerService 截获用户输入,并根据输入给用户一些额外的反馈,起到辅助效果的服务
    AccountManagerService 管理设备中所有账号的服务,包括账号、密码、授权管理功能
    ActivityManagerService 管理所有组件的服务,安卓系统的核心服务 AlarmManagerService 管理闹钟的服务
    AppWidgetService 管理APP widgets的工作,包括加载、删除、布局等
    AssetAtlasService 将一些系统图片资源合并成一个纹理图传给GPU达到硬件加速的效果的服务
    AudioService 管理音频的服务
    BackupManagerService 管理备份和应用数据的服务
    BatteryService 管理电池的服务
    BluetoothManagerService 管理系统蓝牙的服务
    CertBlacklister 更新系统SSL证书的公共秘钥和序列号黑名单的服务
    ClipboardService 管理系统剪贴板的服务
    CommonTimeManagementService 管理公共时间配置的服务
    ConnectivityService 管理网络连接的服务
    ContentService 管理系统数据更新通知的服务,和ContentProvider密切相关
    CountryDetectorService 检测当前系统所属国家的服务
    DevicePolicyManagerService 管理系统设备配置的服务
    DeviceStorageMonitorService 管理系统存储空间的服务,当存储空间小于某个阈值时,会发出警告广播
    DiskStateService 管理系统存储空间统计的服务
    DisplayManagerService 管理显示设备的服务
    DreamManagerService 管理屏幕保护的服务
    DropBoxManagerService 生成和管理系统运行中日志文件的服务
    EntropyMixer 加载和保存随机信息的服务
    IdleMaintenanceService 管理系统在空闲时执行维护任务的服务
    InputManagerService 管理触屏输入的服务
    InputMethodManagerService 管理系统输入法的服务
    LightsService 管理光传感器的服务
    LocationManagerService 管理定位和位置的服务
    LockSettingsService 管理系统锁屏设置的服务
    MountService 管理系统存储设备挂载和卸载的服务
    NetWorkManagementService 管理系统网络的服务
    NetWorkPolicyManagerService 管理网络连接策略的服务
    NetWorkStatsService 管理网络连接状态的服务
    NetWorkTimeUpdateService 根据网络时间更新本地时间的服务
    NotificationManagerService 管理系统通知的服务
    PackageManagerService 管理应用包的服务
    PowerManagerService 管理系统电源的服务
    PrintManagerService 管理打印的服务
    RecognitionManagerService 管理身份识别的服务
    SamplingProfilerService 记录和分析系统启动性能的服务
    SchedulingPolicyService 管理系统调度策略的服务
    SearchManagerServcie 管理系统搜索功能的服务
    SerialServie 管理系统串口设备的服务
    StatusBarManagerService 管理系统状态栏的服务
    TelephonyRegistry 监听和管理通话事件和状态的服务
    TextServicesManagerService 文本拼写检查的服务
    UiModeManagerService 设置和管理系统UI模式的服务
    UsbService 管理USB连接的服务
    UserManagerService 管理系统用户身份信息的服务
    VibratorService 管理系统振动器的服务
    WallpaperManagerService 管理系统桌面背景墙纸的服务
    WifiP2pService 管理Wifi点对点连接的服务
    WifiService 管理系统Wifi设备的服务
    WindowManagerService 管理窗口的服务,安卓系统的核心服务

    Java系统服务的实现

    从在android5.1.1中,Java Service一般都会继承一个虚类SystemService,在其中定义了两个接口onStart和onBootPhase。

    • onStart() :Java Service启动的时候会回调该函数。
    • onBootPhase() : 系统启动的各个阶段会回调该函数。

    这样,启动服务就很简单了:

    mSystemServiceManager.startService(xxxxxxService.class);

    我们继续看一下startService的实现:

    public class SystemServiceManager {
        // 保存所有SystemService
        private final ArrayList<SystemService> mServices = new ArrayList<SystemService>();
    
        public SystemService startService(String className) {
            final Class<SystemService> serviceClass;
            try {
                //调用JVM加载className指定的类,会执行该类的静态代码段
                serviceClass = (Class<SystemService>)Class.forName(className); 
            } catch (ClassNotFoundException ex) { 
                ...
            }
            ...
            mServices.add(service); // 添加该service
    
            try {
                    service.onStart(); // 回调该service的onStart方法
                } catch (RuntimeException ex) {
                    ...
                }
            ...
        }
    }

    下面看一下onBootPhase回调方法。
    在system启动的一些阶段,系统会调用如下代码,主动回调SystemService的onBootPhase方法。

    mSystemServiceManager.startBootPhase(SystemService.PHASE_XXXXXX);
    
    public class SystemServiceManager {
        public void startBootPhase(final int phase) {
            // 阶段值会随着系统启动的进行越来越大,因此下一个阶段值肯定要大于当前阶段
            if (phase <= mCurrentPhase) {
                throw new IllegalArgumentException("Next phase must be larger than previous");
            } 
            mCurrentPhase = phase; //保存当前阶段
    
            // 遍历所有的SystemService,并回调它的onBootPhase方法。
            final int serviceLen = mServices.size();
            for (int i = 0; i < serviceLen; i++) {
                final SystemService service = mServices.get(i);
                try {
                    service.onBootPhase(mCurrentPhase); // 将阶段值也传进去
                } catch (Exception ex) {
                    ...
                }
            }
        }   
    }   

    PHASE_XXXXXX指示了各个不同的启动阶段,定义如下:

    public abstract class SystemService {   
        public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100;     
        public static final int PHASE_LOCK_SETTINGS_READY = 480;  
        public static final int PHASE_SYSTEM_SERVICES_READY = 500;
        public static final int PHASE_ACTIVITY_MANAGER_READY = 550;
        public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600;
        public static final int PHASE_BOOT_COMPLETED = 1000;
    }

    所以,在onBootPhase(int phase)中,我们可以根据phase中指示的启动阶段,做不同的操作!在自己设计新的系统服务时,这个很重要。因为一些操作需要系统环境的支持,有了这个回调函数及phase参数,我们就可以在合适的阶段做合适的操作了。

    另外,Java系统服务中一般还会实现一个方法:systemReady()。该方法在SystemServer.java–>startOtherServices()调用:

    final XXXService xxxService;
    
    mActivityManagerService.systemReady(new Runnable() {
        @Override
        public void run() {
            try {
                if (xxxService != null) xxxService.systemReady();
            } catch (Throwable e) {
                reportWtf("making XXX Service ready", e);
            }
        ...
        }
    }    

    在[Android5.1]ActivityManagerService启动过程分析中,我们知道AMS的systemReady方法会回调这个Runnable,上述代码就会执行。

    注意:Java系统服务的onStart、onBootPhase、systemReady等方法,都运行在system_server主线程中。建议新建一个线程来处理复杂、耗时操作。

    Java系统服务Binder通信

    上面讲了Java系统服务的实现,随之而来的一个问题是,其他服务或应用怎么调用Java系统服务的功能?当然是通过Binder通信。
    下面就讲一下Java系统服务的Binder服务实现。假设服务名为ExampleService。
    首先,需要新建和实现三个文件:

    frameworks/base/core/java/android/app/IExample.aidl
    frameworks/base/core/java/android/app/Example.java
    frameworks/base/services/core/java/android/server/ExampleService.java

    frameworks/base/core/java/android/app/IExample.aidl代码如下:

    interface IExample {
        boolean helloWorld(String str);
    }

    frameworks/base/core/java/android/app/Example.java代码如下:

    class Example {
        private final IExample mService;
    
        Example(Context context, IExample service) {
            mService = service;
        }
    
        public boolean helloWorld(String str) {
            try {
                return mService.helloWorld(str);
            } catch(RemoteException e) {
                return null;
            }
        }
    }

    frameworks/base/services/core/java/android/server/ExampleService.java代码如下:

    class ExampleService extends SystemService {
        private Context mContext;
    
        public ExampleService(Context context) {
            super(context);
            mContext = context;
        } 
    
        @Override
        public void onStart() {
            publishBinderService(Context.EXAMPLE_SERVICE, new BinderService());
        }
    
        @Override
        public void onBootPhase(int phase) {
            if (phase == PHASE_SYSTEM_SERVICES_READY) {
                ...
            }
    
            if (phase == PHASE_ACTIVITY_MANAGER_READY) {
                ...
            }
    
            if (phase == PHASE_BOOT_COMPLETED) {
                ...
            }
            ...
        }
    
        public void systemReady() {
            ...
        }
    
        class BinderService extend IExample.Stub {
            @Override 
            boolean helloWorld(String str) {
                ...
            }
        }   
    }

    其次,修改如下文件的代码:

    frameworks/base/services/java/com/android/server/SystemServer.java
    frameworks/base/core/java/android/content/Context.java
    frameworks/base/core/java/android/app/SystemServiceRegistry.java

    • frameworks/base/services/java/com/android/server/SystemServer.java修改如下:
    import com.android.server.ExampleService;
    public final class SystemServer {
        ExampleService mExampleService = null;
        ...
        private void startOtherServices() {
            ...
            mExampleService = mSystemServiceManager.startService(ExampleService.class);
            ...
            try {
                if (mExampleService != null) mExampleService.systemReady();
            } catch (Throwable e) {
                reportWtf("making Example Service ready", e);
            }
            ...
        }
    • frameworks/base/core/java/android/content/Context.java修改如下:
    public abstract class Context {
        ...
        public static final String EXAMPLE_SERVICE = "example";
        ...
    }
    • frameworks/base/core/java/android/app/SystemServiceRegistry.java修改如下:
    final class SystemServiceRegistry {
        ...
        registerService(Context.EXAMPLE_SERVICE, Example.class,
                new CachedServiceFetcher<Example>() {
            @Override
            public Example createService(ContextImpl ctx) {
                IBinder b = ServiceManager.getService(Context.EXAMPLE_SERVICE);
                IExample service = IExample.Stub.asInterface(b);
                if (service == null) {
                    Log.wtf(TAG, "Failed to get Example Service.");
                }
                return new Example(ctx.getOuterContext(),service);
                }});
        ...
    }

    最后,其他应用或服务通过binder调用ExampleService的helloWorld方法,代码如下:

    import android.app.Example;
    
    class Client {
        static Example mService;
        mService = (Example) context.getSystemService(Context.EXAMPLE_SERVICE);
        mService.helloWorld(str);
    }
    展开全文
  • 为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先...
  • Python制作Windows系统服务

    万次阅读 2017-03-23 09:27:39
    Python制作Windows系统服务最近有个Python程序需要安装并作为Windows系统服务来运行,过程中碰到一些坑,整理了一下。Python服务类首先Python程序需要调用一些Windows系统API才能作为系统服务,具体内容如下:#!/usr...

    Python制作Windows系统服务

    最近有个Python程序需要安装并作为Windows系统服务来运行,过程中碰到一些坑,整理了一下。

    Python服务类

    首先Python程序需要调用一些Windows系统API才能作为系统服务,具体内容如下:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    import time
    
    import win32api
    import win32event
    import win32service
    import win32serviceutil
    import servicemanager
    
    
    class MyService(win32serviceutil.ServiceFramework):
    
        _svc_name_ = "MyService"
        _svc_display_name_ = "My Service"
        _svc_description_ = "My Service"
    
        def __init__(self, args):
            self.log('init')
            win32serviceutil.ServiceFramework.__init__(self, args)
            self.stop_event = win32event.CreateEvent(None, 0, 0, None)
    
        def SvcDoRun(self):
            self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
            try:
                self.ReportServiceStatus(win32service.SERVICE_RUNNING)
                self.log('start')
                self.start()
                self.log('wait')
                win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
                self.log('done')
            except BaseException as e:
                self.log('Exception : %s' % e)
                self.SvcStop()
    
        def SvcStop(self):
            self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
            self.log('stopping')
            self.stop()
            self.log('stopped')
            win32event.SetEvent(self.stop_event)
            self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    
        def start(self):
            time.sleep(10000)
    
        def stop(self):
            pass
    
        def log(self, msg):
            servicemanager.LogInfoMsg(str(msg))
    
        def sleep(self, minute):
            win32api.Sleep((minute*1000), True)
    
    if __name__ == "__main__":
        if len(sys.argv) == 1:
            servicemanager.Initialize()
            servicemanager.PrepareToHostSingle(MyService)
            servicemanager.StartServiceCtrlDispatcher()
        else:
            win32serviceutil.HandleCommandLine(MyService)
    

    pyinstaller打包

    pyinstaller -F MyService.py

    测试

    # 安装服务
    dist\MyService.exe install
    
    # 启动服务
    sc start MyService
    
    # 停止服务
    sc stop MyService
    
    # 删除服务
    sc delete MyService

    转载请以链接形式标明本文链接
    本文链接:http://blog.csdn.net/kongxx/article/details/65435076

    展开全文
  • Tomcat做成系统服务

    千次阅读 2018-10-11 16:51:28
    下面是如何有关于Tomcat服务的设置: 一、注册为Windows系统服务: ...这一句是将当前Tomcat服务器注册为系统服务,服务名称为service.bat中PR_DISPLAYNAME加上指定的服务名称, 如果服务名不写则服务名为servic...

    下面是如何有关于Tomcat服务的设置:

    一、注册为Windows系统服务:

    运行cmd打开控制台,进入Tomat目录/bin文件夹,会看到service.bat输入如下命令运行。
    service install 服务名称

    这一句是将当前Tomcat服务器注册为系统服务,服务名称为service.bat中PR_DISPLAYNAME加上指定的服务名称,

    如果服务名不写则服务名为service.bat文件中的PR_DISPLAYNAME加上SERVICE_NAME

    二、让注册的服务随系统启动:

    开始- 运行 输入services.msc 或者图形界面进入Windows服务,找到刚刚注册的服务项 右键-属性-启动类型设置为自动,然后启动该服务,点击应用。

    三、卸载服务

    运行cmd打开控制台,进入Tomat目录/bin文件夹

    service uninstall 服务名

    四、控制台控制服务的命令
    1.启动服务
    net Start 服务名
    2.关闭服务
    net stop 服务名

    五:其他

    1 多个Tomcat要分配不同的端口,可以再%TOMCAT_HOME%\conf中的service.xml中修改

    2 可以修改 service.bat 文件来更改一些默认配置。
    3 如果服务名中包含空格或者中文,请将服务名用半角双引号包含起来。

     

    展开全文
  • 信息系统服务管理

    千次阅读 2014-09-21 12:37:43
    考试大纲 1.信息系统服务管理体系:信息系统
  • Windows 10 封装普通EXE为系统服务

    千次阅读 2018-08-22 00:35:51
    Windows 10 封装普通EXE为系统服务 Windows服务是指Windows操作系统中的一种运行在后台的计算机程序。它在概念上类似于Unix/Linux守护进程,一个标准的Windows服务必须匹配服务控制管理器(SCM)(负责管理Windows...
  • Android系统服务(SystemService)简介

    万次阅读 多人点赞 2017-12-20 17:35:49
    介绍Android中系统服务的实现流程
  • CentOS 7 systemd添加自定义系统服务

    千次阅读 2016-09-14 16:48:36
    CentOS 7继承了RHEL 7的新的特性,例如强大的systemd,而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,说实在...
  • CentOS 7设置开机启动服务,添加自定义系统服务 建立服务文件 保存目录 设置开机自启动 其他命令 1.建立服务文件文件路径vim /usr/lib/systemd/system/nginx.service 服务文件内容[Unit] Description=nginx - high ...
  • 添加nginx作为系统服务

    千次阅读 2016-08-12 14:07:07
    前言创建一个脚本,该脚本将改变nginx守护进程,让nginx以系统服务的形式启动,守护进程以后将由标准的命令控制且在系统启动时自动启动。System V脚本大多数基于linux的操作系统,使用的是System-V风格的init守护...
  • CentOS 6.5系统服务详解

    千次阅读 2015-01-01 10:31:04
    CentOS 6.x的系统服务比5.x系列的要多了很多新面孔,,因为开启不必要的服务越多,系统就相对越不安全。不需开启的服务尽量关闭。  1、下面列表是在CentOS 6.x最小化桌面环境安装下显示出来的系统服务,其中红色...
  • Android 添加系统服务

    万次阅读 2012-04-20 11:56:27
    Android系统本身提供了很多系统服务,如WindowManagerService,PowerManagerService等。下面描述一下添加一个系统服务的具体步骤。 1、 撰写一个aidl文件,定义服务的接口,将在编译过程中通过aidl
  • Ubuntu系统服务详解

    千次阅读 2012-05-09 03:03:16
    Liunx操作系统跟Windos XP一样,有一批系统服务随机而启动;略懂电脑的Windows XP用户会禁止那些不必要的服务,以提高开机速度;如今安装了Ubuntu操作系统,咱们也有必要了解Ubuntu的服务,然后根据自己的需要,将...
  • 添加 Mysql服务到系统服务Mysql安装在 D:\Program Files (x86)\mysql-5.6.37_64验证前台启动// 前台启动方式,加载指定配置文件 // 以这种方式确认启动没有问题,后面方便添加到系统服务. // 不然即使显示添加成功,...
  • 文章目录前期准备打包成可执行jar包注册成为liunx服务...将Spring Boot应用程序注册成为系统服务 在之前的文章中,我们提到了很多Spring Boot的技巧,那么当我们创建好了Spring Boot应用程序之后,怎么在生成环境...
  • 1.确保已安装MySQL数据库,找到安装目录,我的是在E盘目录下 2.以管理员方式打开控制台 右键以管理员方式打开,找到MySQL安装目录,进入...3.查看MySQL服务是否添加到系统服务队列 设置MySQL服务为自动。...
  • 搭建IDEA License Serve本地系统服务

    千次阅读 2017-12-23 22:27:03
    搭建IDEA License Serve本地系统服务,使破解程序变成一个后台服务
  • CentOS7利用systemctl添加自定义系统服务

    万次阅读 多人点赞 2016-04-07 10:52:06
    CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下 每一个服务以.service结尾,...
  • 将jar文件安装为系统服务

    千次阅读 2017-05-24 14:39:31
    将java程序安装为系统服务
  • Linux系统服务、目录含义及其配置

    千次阅读 2015-02-03 17:59:15
    Linux 系统服务有时也称为守护程序,是在Linux启动时自动加载并在Linux退出时自动停止的系统任务。在Linux 启动过程中我们可以看得很多starting … 提示信息,该信息表示正在启动系统服务,而在Linux 退出时,我们也...
  • 在Linux中利用Service命令添加系统服务及开机自启动

    万次阅读 多人点赞 2017-12-13 15:44:08
    近期由于做嵌入式项目需要,要求将编写的程序在板载系统开机时自启动。这里做个笔记,备忘。 1 概念 通过查资料发现linux启动服务是用SERVICE +COMMAND。这里的command命令本身也是一个脚本。比如说:service ...
  • Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行;系统服务是运行在System Idle Process/System/smss/winlogon/services下的,而桌面程序是...
  • 要想通过ssh远程访问,需要...通过chkconfig可以将sshd加入到系统服务中。   [root@localhost ~]# chkconfig sshd on   可以再查看sshd的运行级别状态:   [root@localhost ~]# chkconfig --list
  • 发现windows系统服务中没有找到。然后执行一下命令:mysqld --install MySQL --defaults-file="F:\mysql\mysql-5.7.9-winx64\my-default.ini"好吧,原来之前执行后没有起作用。 我没有用管理员运行cmd。...
  • 阿里云ECS Winows系统服务器解决web服务80端口监听异常 远程桌面连接登录Windows系统服务器后,查看web服务没有运行,运行下输入cmd进入命令提示符:   输入命令netstat -...
  • 注册MongoDB为系统服务(二)

    千次阅读 2016-08-24 21:29:54
    注册MongoDB为系统服务 由于我们每次使用mongodb数据库的时候都需要切换到...注意:解压出来的mongodb数据库的服务是不在windows系统服务中,需要我们进行手动配置一下。 步骤如下: 步骤一:以系统管理员身份打开

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 674,961
精华内容 269,984
关键字:

系统服务