[Win基础]-11-理解Windows进程与服务
引言
这篇文章主要讲解Windows中的进程与服务,理解什么是进程,什么是服务,以及如何创建自启动服务。
文章目录
0×1.Windows进程与服务解析
首先来看看网络上对进程的定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程的分类:在windows中,进程又分为普通进程和共享进程,普通进程往往以单个exe文件启动,而共享进程往往以宿主文件的形式启动,例如svchost.exe文件就是windows中最常用的宿主进程。
进程的启动方式:使用者启动(双击或命令行调用),其他程序调用(例如:cmd调用notepad),登录自启动(例如:在注册表启动项添加程序路径),使用服务方式启动(又分为:共享进程方式启动:RpcSs(Remote Procedure Call (RPC)),单独进程的方式启动:spooler(print spooler))services.msc服务管理器中的所有数据都保存在注册表中,包括服务的可调用动态链接库(.dll)文件。
特殊:驱动类型,可被进程调用运行在进程分配的内存空间中,或运行在系统内核分配的内存空间中。
下面是视频中操作进程用到的命令:
#CMD操作进程命令
//查看进程列表
C:\Windows\System32> tasklist /svc
//使用进程名结束进程
C:\Windows\System32> taskkill /IM notepad.exe /F
//使用PID结束进程
C:\Windows\System32> taskkill /PID 1234 /F
#PowerShell操作进程命令
//获取进程列表
PS C:\Windows\System32> Get-Process
//通过名称获取单个进程信息,通配符*能够获取cmd开头的所有进程
PS C:\Windows\System32> Get-Process -Name "cmd*"
//通过PID获取单个进程信息,例如pid为1234的进程
PS C:\Windows\System32> Get-Process -PID 1234
//通过名称结束单个进程,注意PowerShell对进程的操作,不需要携带.exe后缀,只需要程序名称即可
PS C:\Windows\System32> Stop-Process -Name "cmd"
//通过名称结束多个进程,结束cmd开头的所有进程
PS C:\Windows\System32> Stop-Process -Name "cmd*"
//通过PID结束单个进程,结束进程id为1234的进程
PS C:\Windows\System32> Stop-Process -ID 1234
#CMD操作服务命令
//以打印机服务spooler举例
//查询服务启动状态,查询服务名称为spooler的服务的启动状态
C:\Windows\System32> sc query spooler
//停止服务
C:\Windows\System32> sc stop spooler
//启动服务
C:\Windows\System32> sc start spooler
//更改服务启动类型,start=后面需要有一个空格,然后接auto(自动启动),demand(手动启动),disabled(禁止启动)
C:\Windows\System32> sc config spooler start= <auto|demand|disabled>
//例如,将spooler更改成手动启动
C:\Windows\System32> sc config spooler start= demand
#CMD注册修改和删除服务(不能成功启动的原因在视频中有讲解)
#这种注册服务的方法,需要自己写一个dll动态链接库,或者封装一个exe程序,程序包含windows服务管理器需要调用的服务函数功能,才能启动成功
//创建
C:\Windows\System32> sc create CMD binPath= "c:\windows\system32\cmd.exe" start= auto displayname= "cmd-line"
//修改服务描述
C:\Windows\System32> sc description CMD "HackMM"
//删除服务
C:\Windows\System32> sc delete CMD
#使用第三方宿主程序winsw.exe创建服务
#这个宿主程序在本文结尾提供下载
#弊端:每个winsw.exe文件只能对应一个要启动服务程序,不能像svchost.exe一样单个程序承载多个服务
//winsw.exe程序需要自己创建一个同名的winsw.xml配置文件(宿主程序的名称可以随意改动,配置文件和宿主程序同名即可),放在同一个文件夹下,内容如下
<service>
<id>服务名称</id>
<name>服务显示名称</name>
<description>服务描述信息</description>
<env name="环境变量" value="环境变量的值"/>
<executable>服务的完整路径</executable>
<arguments>程序如果需要传入参数,写在这里</arguments>
<log mode="roll"></log>
</service>
//例如,将系统中的notepad做成服务,下面的配置供参考
<service>
<id>notepad</id>
<name>notepad app</name>
<description>hk987.xyz notepad app</description>
<executable>c:\windows\system32\notepad.exe</executable>
<log mode="roll"></log>
</service>
//假设我没有改宿主程序的名称,宿主程序任然叫winsw.exe,在配置保存好后,用超级管理员运行下面的命令,注册服务
C:\Windows\System32> winsw.exe install
//启动服务
C:\Windows\System32> winsw.exe start
//卸载服务
C:\Windows\System32> winsw.exe uninstall
安装服务用到的软件:
*「winsw软件」:点击打开