Windows 进程你需要知道的技巧

系统 Windows 服务器
在 Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用。

问题引入

不知道大家最近工作生活中有没有碰到这样的问题:

1、卸载程序,结果没卸载干净

   程序的安装目录中还剩下一个dll文件。想删,结果系统提示说dll文件被某个进程占用了,不让删。

2、安装软件后需要破解或者修改一些配置,通常会有替换配置文件 dll 文件。但是有些情况当安装软件时

   其服务默认是自动开启的,此时也就会用到对应的 dll 文件,这个时候在进行更改就会出现异常,

   windows 会提示该文件已被某个进程占用。

[[243073]]

我最近在安装一个服务组件的软件时,因为其内置了一个 sql 数据库程序,当时没留意。再替换配置文件 时才发现 dll 文件被某个进程占用了。重启程序、重启电脑都未能解决,问题就指向了一个原因,那就是该服务是自动开启的,即 windows 开机就自动开启,因而也就会一直占用该 dll 文件。

但是通过 windows 的服务列表界面有很多服务一眼也看不出是哪个服务占用。(当然对启动的服务都很了解的话,就会知道安装一个软件会有哪些服务被启动。)

被这个问题卡住了,搜索了半天资料找到了下面这个神器:tasklist。(好吧,承认是windows平台的底层操作不熟,但是解决问题过程中学习成长还是很有成就感的不是,相信你也有这体会。)

关于 dll 文件

DLL ( Dynamic Link Library ) 文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。

在 Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用。

1、 作用

  • 在 Windows操作系统中,每个程序都可以使用该 DLL中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
  • 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。 因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
  • 此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。

2、 特点

  • 使用较少的资源
  • 推广模块式体系结构

三、 简化部署和安装

利器登场

一、用法明细

tasklist  这个命令还是很好使的,先看下用法手册:

  1. F:\>help tasklist 
  2.  
  3. TASKLIST [/S system [/U username [/P [password]]]] 
  4.          [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH] 
  5.  
  6. 描述: 
  7.     该工具显示在本地或远程机器上当前运行的进程列表。 
  8.  
  9.  
  10. 参数列表: 
  11.    /S     system           指定连接到的远程系统。 
  12.  
  13.    /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。 
  14.  
  15.    /P     [password]       为提供的用户上下文指定密码。如果省略,则 
  16.                            提示输入。 
  17.  
  18.    /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。 
  19.                            如果没有指定模块名称,显示所有加载的模块。 
  20.  
  21.    /SVC                    显示每个进程中主持的服务。 
  22.  
  23.    /APPS 显示 Microsoft Store 应用及其关联的进程。 
  24.  
  25.    /V                      显示详细任务信息。 
  26.  
  27.    /FI    filter           显示一系列符合筛选器 
  28.                            指定条件的任务。 
  29.  
  30.    /FO    format           指定输出格式。 
  31.                            有效值: "TABLE""LIST""CSV"。 
  32.  
  33.    /NH                     指定列标题不应该 
  34.                            在输出中显示。 
  35.                            只对 "TABLE" 和 "CSV" 格式有效。 
  36.  
  37.    /?                      显示此帮助消息。 
  38.  
  39. 筛选器: 
  40.     筛选器名称     有效运算符           有效值 
  41.     -----------     ---------------           -------------------------- 
  42.     STATUS          eq, ne                    RUNNING | SUSPENDED 
  43.                                               NOT RESPONDING | UNKNOWN 
  44.     IMAGENAME       eq, ne                    映像名称 
  45.     PID             eq, ne, gt, lt, ge, le    PID 值 
  46.     SESSION         eq, ne, gt, lt, ge, le    会话编号 
  47.     SESSIONNAME     eq, ne                    会话名称 
  48.     CPUTIME         eq, ne, gt, lt, ge, le    CPU 时间,格式为 
  49.                                               hh:mm:ss。 
  50.                                               hh - 小时, 
  51.                                               mm - 分钟,ss - 秒 
  52.     MEMUSAGE        eq, ne, gt, lt, ge, le    内存使用(以 KB 为单位) 
  53.     USERNAME        eq, ne                    用户名,格式为 
  54.                                               [域\]用户 
  55.     SERVICES        eq, ne                    服务名称 
  56.     WINDOWTITLE     eq, ne                    窗口标题 
  57.     模块         eq, ne                    DLL 名称 
  58.  
  59. 注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS" 
  60.       筛选器。 
  61.  
  62. Examples: 
  63.     TASKLIST 
  64.     TASKLIST /M 
  65.     TASKLIST /V /FO CSV 
  66.     TASKLIST /SVC /FO LIST 
  67.     TASKLIST /APPS /FI "STATUS eq RUNNING" 
  68.     TASKLIST /M wbem* 
  69.     TASKLIST /S system /FO LIST 
  70.     TASKLIST /S system /U 域\用户名 /FO CSV /NH 
  71.     TASKLIST /S system /U username /P password /FO TABLE /NH 
  72.     TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running" 

当然解决问题只用了 tasklist /m filename.dll 一个命令就解决了,示例如下:

  1. F:\>tasklist /m msctf.dll 
  2.  
  3. 映像名称                       PID 模块 
  4. ========================= ======== ============================================ 
  5. svchost.exe                   5844 MSCTF.dll 
  6. igfxEM.exe                   16560 MSCTF.dll 
  7. igfxHK.exe                   11336 MSCTF.dll 
  8. igfxTray.exe                  1060 MSCTF.dll 
  9. explorer.exe                  9848 MSCTF.dll 
  10. taskhostw.exe                10932 MSCTF.dll 
  11. ShellExperienceHost.exe       1684 msctf.dll 
  12. SearchUI.exe                 16576 msctf.dll 
  13. RuntimeBroker.exe            16440 MSCTF.dll 
  14. ApplicationFrameHost.exe     11612 MSCTF.dll 
  15. SynTPEnh.exe                 10604 MSCTF.dll 
  16. WindowsInternal.Composabl    14508 msctf.dll 
  17. MSASCuiL.exe                  5724 MSCTF.dll 
  18. RAVCpl64.exe                  7132 MSCTF.dll 
  19. Video.UI.exe                 12716 msctf.dll 
  20. ... //后续较多,故省略。 

二、常用用法

1、查看本机进程

在"命令提示符"中输入Tasklist命令即可显示本机的所有进程(见下图)。本机的显示结果由5部分组成:图像名(进程名)、PID、会话名、会话#和内存使用。

  1. F:\>tasklist 
  2.  
  3. 映像名称                       PID 会话名              会话#       内存使用 
  4. ========================= ======== ================ =========== ============ 
  5. System Idle Process              0 Services                   0          8 K 
  6. System                           4 Services                   0         24 K 
  7. Registry                       120 Services                   0     15,936 K 
  8. smss.exe                       416 Services                   0        520 K 
  9. csrss.exe                      664 Services                   0      1,968 K 
  10. wininit.exe                    768 Services                   0      2,536 K 
  11. services.exe                   844 Services                   0      5,836 K 
  12. lsass.exe                      864 Services                   0     12,052 K 
  13. svchost.exe                    384 Services                   0        568 K 
  14. svchost.exe                    596 Services                   0     23,896 K 
  15. fontdrvhost.exe                628 Services                   0        936 K 
  16. svchost.exe                   1048 Services                   0     11,536 K 
  17. svchost.exe                   1088 Services                   0      5,008 K 
  18. svchost.exe                   1304 Services                   0      5,528 K 
  19. svchost.exe                   1312 Services                   0      7,152 K 
  20. svchost.exe                   1368 Services                   0      4,944 K 
  21. ...   //进程太多,省略后续 

2.查看远程系统的进程

在命令提示符下输入 以下命令:

  1. F:\>Tasklist /s 220.25.122.21 /u admin /p admin123 
  2.  
  3. >命令说明 
  4. 220.25.122.21    //远程系统的进程 ip 地址 
  5. /u admin         // admin 为Tasklist命令使用的用户账号,它必须是远程系统上的一个合法账号 
  6. /p admin123      // Tasklist命令使用的用户账号对应的密码 

注意:使用Tasklist命令查看远程系统的进程时,需要远程机器的RPC服务的支持,否则,该命令不能正常使用。

3.查看系统进程提供的服务

Tasklist命令不但可以查看系统进程,而且还可以查看每个进程提供的服务。如查看本机进程 SVCHOST.EXE 提供的服务,在命令提示符下输入如下命令。可以看到,有很多个SVCHOST.EXE 进程,对应很多项服务使用这个进程。

  1. F:\>Tasklist /svchost 
  2.  
  3. 映像名称                       PID 服务 
  4. ========================= ======== ============================================ 
  5. System Idle Process              0 暂缺 
  6. System                           4 暂缺 
  7. Registry                       120 暂缺 
  8. smss.exe                       416 暂缺 
  9. csrss.exe                      664 暂缺 
  10. wininit.exe                    768 暂缺 
  11. services.exe                   844 暂缺 
  12. lsass.exe                      864 KeyIso, SamSs, VaultSvc 
  13. svchost.exe                    384 PlugPlay 
  14. svchost.exe                    596 BrokerInfrastructure, DcomLaunch, Power, SystemEventsBroker 
  15. fontdrvhost.exe                628 暂缺 
  16. svchost.exe                   1048 RpcEptMapper, RpcSs 
  17. svchost.exe                   1088 LSM 
  18. svchost.exe                   1304 bthserv 
  19. svchost.exe                   1312 BthAvctpSvc 
  20. svchost.exe                   1368 NcbService 
  21. svchost.exe                   1388 TimeBrokerSvc 
  22. svchost.exe                   1528 Schedule 
  23. svchost.exe                   1568 hidserv 
  24. svchost.exe                   1576 BFE, CoreMessagingRegistrar, mpssvc 
  25. svchost.exe                   1652 ProfSvc 
  26. svchost.exe                   1728 EventLog 
  27. ......   //省略后续 

对于远程系统来说,查看系统服务也很简单,使用 Tasklist /s 220.25.122.21 /u admin /p admin123 /svc 命令,就可以查看IP地址为 220.25.122.21 的远程系统进程所提供的服务。

4.查看调用DLL模块文件的进程列表

要查看本地系统中哪些进程调用了 shell32.dll 模块文件,只需在命令提示符下输入 Tasklist /m shell32.dll 即可显示这些进程的列表。

上文已经给过演示,参考下即可。

5.使用筛选器查找指定的进程

在命令提示符下输入 TASKLIST /FI USERNAME ne NT AUTHORITY\SYSTEM /FI STATUS eq running ,就可以列出系统中正在运行的非 SYSTEM 状态的所有进程。其中/FI为筛选器参数,ne 和 eq 为关系运算符 "不相等" 和 "相等" 。

6、结束进程

1)  Tasklist

谈到Tasklist命令,我们就不得不提到它的孪生兄弟Taskkill命令,顾名思义,它是用来关掉进程的。

要关掉本机的notepad.exe进程,有两种方法

  • 先使用Tasklist查找它的PID,假设系统显示本机 notepad.exe ( notepad.exe 是个病毒性程序,很难删除,一般在C:/windows/system32下)进程的 PID 值为 1132,然后运行Taskkill /pid 1132命令即可。其中 /pid 参数后面是要终止进程的PID值。
  • 直接运行taskkill /IM notepad.exe 命令,其中/IM参数后面为进程的图像名。

详细用法如下:

  1. F:\>help taskkill 
  2.  
  3. TASKKILL [/S system [/U username [/P [password]]]] 
  4.          { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 
  5.  
  6. 描述: 
  7.     使用该工具按照进程 ID (PID) 或映像名称终止任务。 
  8.  
  9. 参数列表: 
  10.     /S    system           指定要连接的远程系统。 
  11.  
  12.     /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。 
  13.  
  14.     /P    [password]       为提供的用户上下文指定密码。如果忽略,提示 
  15.                            输入。 
  16.  
  17.     /FI   filter           应用筛选器以选择一组任务。 
  18.                            允许使用 "*"。例如,映像名称 eq acme* 
  19.  
  20.     /PID  processid        指定要终止的进程的 PID。 
  21.                            使用 TaskList 取得 PID。 
  22.  
  23.     /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来 
  24.                            指定所有任务或映像名称。 
  25.  
  26.     /T                     终止指定的进程和由它启用的子进程。 
  27.  
  28.     /F                     指定强制终止进程。 
  29.  
  30.     /?                     显示帮助消息。 
  31.  
  32. 筛选器: 
  33.     筛选器名      有效运算符                有效值 
  34.     -----------   ---------------           ------------------------- 
  35.     STATUS        eq, ne                    RUNNING | 
  36.                                             NOT RESPONDING | UNKNOWN 
  37.     IMAGENAME     eq, ne                    映像名称 
  38.     PID           eq, ne, gt, lt, ge, le    PID 值 
  39.     SESSION       eq, ne, gt, lt, ge, le    会话编号。 
  40.     CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为 
  41.                                             hh:mm:ss。 
  42.                                             hh - 时, 
  43.                                             mm - 分,ss - 秒 
  44.     MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用量,单位为 KB 
  45.     USERNAME      eq, ne                    用户名,格式为 [domain\]user 
  46.     MODULES       eq, ne                    DLL 名称 
  47.     SERVICES      eq, ne                    服务名称 
  48.     WINDOWTITLE   eq, ne                    窗口标题 
  49.  
  50.     说明 
  51.     ---- 
  52.     1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。 
  53.     2) 远程进程总是要强行 (/F) 终止。 
  54.     3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。 
  55.  
  56. 例如: 
  57.     TASKKILL /IM notepad.exe 
  58.     TASKKILL /PID 1230 /PID 1241 /PID 1253 /T 
  59.     TASKKILL /F /IM cmd.exe /T 
  60.     TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" 
  61.     TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe 
  62.     TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM * 
  63.     TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*" 

2)、NTSD

系统 debug 级的 ntsd,很多进程 Taskkill 是杀不了的,但是用ntsd就可以,基本上除了WINDOWS 系统自己的管理进程, ntsd 都可以杀掉,不过有些 rootkit 级别的超级木马就无能为力了,不过幸好这类木马还是很少的。

1、利用进程的PID结束进程

命令格式:ntsd -c q -p pid

命令范例: ntsd -c q -p 1332 (结束explorer.exe进程)

2、利用进程名结束进程

命令格式:ntsd -c q -pn ***.exe (***.exe 为进程名,exe不能省)

以上是对于 windows 平台进程相关的一些命令以及相关问题的整理回顾。

1、文章参考

https://www.cnblogs.com/leipei2352/archive/2013/02/05/2892482.html

责任编辑:武晓燕 来源: 极客创享会
相关推荐

2020-03-27 12:30:39

python开发代码

2013-03-04 09:34:48

CSSWeb

2023-01-09 17:23:14

CSS技巧

2024-04-03 10:29:13

JavaScrip优化技巧

2022-04-28 12:17:26

浏览器连字符hyphens

2022-07-06 15:51:48

浏览器开发者工具

2017-04-29 09:00:14

Linux程序进程

2023-03-19 16:02:33

JavaScrip技巧编程语言

2023-03-31 08:10:50

2022-12-12 13:19:11

Vue3开发技巧

2015-07-27 17:54:49

Windows 10升级

2011-09-20 10:56:35

云计算PaaS

2022-08-10 09:03:35

TypeScript前端

2022-04-29 09:00:00

Platform架构内核线程

2023-07-11 09:07:49

数组Promise方法

2022-07-26 09:02:15

ES6ES13ECMAScript

2013-05-27 09:33:13

Windows 8.1

2018-05-30 15:15:47

混合云公共云私有云

2019-10-23 10:36:46

DevSecOpsDevOps

2014-07-31 17:13:50

编码程序员
点赞
收藏

51CTO技术栈公众号