windows 进程你需要知道的技巧

问题引入

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

1、卸载程序,结果没卸载干净
   程序的安装目录中还剩下一个dll文件。想删,结果系统提示说dll文件被某个进程占用了,不让删。
2、安装软件后需要破解或者修改一些配置,通常会有替换配置文件 dll 文件。但是有些情况当安装软件时
   其服务默认是自动开启的,此时也就会用到对应的 dll 文件,这个时候在进行更改就会出现异常,
   windows 会提示该文件已被某个进程占用。

我最近在安装一个服务组件的软件时,因为其内置了一个 sql 数据库程序,当时没留意。再替换配置文件 时才发现 dll 文件被某个进程占用了。重启程序、重启电脑都未能解决,问题就指向了一个原因,那就是该服务时自动开启的,即 windows 开机就自动开启,因而也就会一直占用该 dll 文件。
但是通过 windows 的服务列表界面有很多服务一眼也看不出是哪个服务占用。(当然对启动的服务都很了解的话,就会知道安装一个软件会有哪些服务被启动。)
被这个问题卡住了,搜索了半天资料找到了下面这个神器:tasklist。(好吧,承认是windows平台的底层操作不熟,但是解决问题过程中学习成长还是很有成就感的不是,相信你也有这体会。)

关于 dll 文件

DLL ( Dynamic Link Library ) 文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。
在 Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用。

1、 作用

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

2、 特点

  • 使用较少的资源
  • 推广模块式体系结构
  • 三、 简化部署和安装

利器登场

一、用法明细

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

F:\>help tasklist

TASKLIST [/S system [/U username [/P [password]]]]
         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
    该工具显示在本地或远程机器上当前运行的进程列表。


参数列表:
   /S     system           指定连接到的远程系统。

   /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。

   /P     [password]       为提供的用户上下文指定密码。如果省略,则
                           提示输入。

   /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。
                           如果没有指定模块名称,显示所有加载的模块。

   /SVC                    显示每个进程中主持的服务。

   /APPS 显示 Microsoft Store 应用及其关联的进程。

   /V                      显示详细任务信息。

   /FI    filter           显示一系列符合筛选器
                           指定条件的任务。

   /FO    format           指定输出格式。
                           有效值: "TABLE"、"LIST"、"CSV"。

   /NH                     指定列标题不应该
                           在输出中显示。
                           只对 "TABLE" 和 "CSV" 格式有效。

   /?                      显示此帮助消息。

筛选器:
    筛选器名称     有效运算符           有效值
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING | SUSPENDED
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    映像名称
    PID             eq, ne, gt, lt, ge, le    PID 值
    SESSION         eq, ne, gt, lt, ge, le    会话编号
    SESSIONNAME     eq, ne                    会话名称
    CPUTIME         eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                              hh:mm:ss。
                                              hh - 小时,
                                              mm - 分钟,ss - 秒
    MEMUSAGE        eq, ne, gt, lt, ge, le    内存使用(以 KB 为单位)
    USERNAME        eq, ne                    用户名,格式为
                                              [域\]用户
    SERVICES        eq, ne                    服务名称
    WINDOWTITLE     eq, ne                    窗口标题
    模块         eq, ne                    DLL 名称

注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"
      筛选器。

Examples:
    TASKLIST
    TASKLIST /M
    TASKLIST /V /FO CSV
    TASKLIST /SVC /FO LIST
    TASKLIST /APPS /FI "STATUS eq RUNNING"
    TASKLIST /M wbem*
    TASKLIST /S system /FO LIST
    TASKLIST /S system /U 域\用户名 /FO CSV /NH
    TASKLIST /S system /U username /P password /FO TABLE /NH
    TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

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

F:\>tasklist /m msctf.dll

映像名称                       PID 模块
========================= ======== ============================================
svchost.exe                   5844 MSCTF.dll
igfxEM.exe                   16560 MSCTF.dll
igfxHK.exe                   11336 MSCTF.dll
igfxTray.exe                  1060 MSCTF.dll
explorer.exe                  9848 MSCTF.dll
taskhostw.exe                10932 MSCTF.dll
ShellExperienceHost.exe       1684 msctf.dll
SearchUI.exe                 16576 msctf.dll
RuntimeBroker.exe            16440 MSCTF.dll
ApplicationFrameHost.exe     11612 MSCTF.dll
SynTPEnh.exe                 10604 MSCTF.dll
WindowsInternal.Composabl    14508 msctf.dll
MSASCuiL.exe                  5724 MSCTF.dll
RAVCpl64.exe                  7132 MSCTF.dll
Video.UI.exe                 12716 msctf.dll
... //后续较多,故省略。

二、常用用法

1、查看本机进程

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

F:\>tasklist

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

2.查看远程系统的进程

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

F:\>Tasklist /s 220.25.122.21 /u admin /p admin123

>命令说明
220.25.122.21    //远程系统的进程 ip 地址
/u admin         // admin 为Tasklist命令使用的用户账号,它必须是远程系统上的一个合法账号
/p admin123      // Tasklist命令使用的用户账号对应的密码

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

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

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

F:\>Tasklist /svc

映像名称                       PID 服务
========================= ======== ============================================
System Idle Process              0 暂缺
System                           4 暂缺
Registry                       120 暂缺
smss.exe                       416 暂缺
csrss.exe                      664 暂缺
wininit.exe                    768 暂缺
services.exe                   844 暂缺
lsass.exe                      864 KeyIso, SamSs, VaultSvc
svchost.exe                    384 PlugPlay
svchost.exe                    596 BrokerInfrastructure, DcomLaunch, Power, SystemEventsBroker
fontdrvhost.exe                628 暂缺
svchost.exe                   1048 RpcEptMapper, RpcSs
svchost.exe                   1088 LSM
svchost.exe                   1304 bthserv
svchost.exe                   1312 BthAvctpSvc
svchost.exe                   1368 NcbService
svchost.exe                   1388 TimeBrokerSvc
svchost.exe                   1528 Schedule
svchost.exe                   1568 hidserv
svchost.exe                   1576 BFE, CoreMessagingRegistrar, mpssvc
svchost.exe                   1652 ProfSvc
svchost.exe                   1728 EventLog
......   //省略后续

对于远程系统来说,查看系统服务也很简单,使用 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为筛选器参数,neeq 为关系运算符 "不相等" 和 "相等" 。

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参数后面为进程的图像名。

详细用法如下:

F:\>help taskkill

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

描述:
    使用该工具按照进程 ID (PID) 或映像名称终止任务。

参数列表:
    /S    system           指定要连接的远程系统。

    /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。

    /P    [password]       为提供的用户上下文指定密码。如果忽略,提示
                           输入。

    /FI   filter           应用筛选器以选择一组任务。
                           允许使用 "*"。例如,映像名称 eq acme*

    /PID  processid        指定要终止的进程的 PID。
                           使用 TaskList 取得 PID。

    /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来
                           指定所有任务或映像名称。

    /T                     终止指定的进程和由它启用的子进程。

    /F                     指定强制终止进程。

    /?                     显示帮助消息。

筛选器:
    筛选器名      有效运算符                有效值
    -----------   ---------------           -------------------------
    STATUS        eq, ne                    RUNNING |
                                            NOT RESPONDING | UNKNOWN
    IMAGENAME     eq, ne                    映像名称
    PID           eq, ne, gt, lt, ge, le    PID 值
    SESSION       eq, ne, gt, lt, ge, le    会话编号。
    CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                            hh:mm:ss。
                                            hh - 时,
                                            mm - 分,ss - 秒
    MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用量,单位为 KB
    USERNAME      eq, ne                    用户名,格式为 [domain\]user
    MODULES       eq, ne                    DLL 名称
    SERVICES      eq, ne                    服务名称
    WINDOWTITLE   eq, ne                    窗口标题

    说明
    ----
    1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
    2) 远程进程总是要强行 (/F) 终止。
    3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。

例如:
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
    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 平台进程相关的一些命令以及相关问题的整理回顾。

问题搜集
你在平时工作生活中遇到过 windows 平台哪些坑?又是如何解决的?欢迎留言探讨。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,725评论 0 11
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,815评论 0 27
  • 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,Windows 操作系统的应用越来...
    Littleston阅读 3,319评论 0 12
  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小沐子_IT阅读 2,119评论 0 4
  • 胆大心细,不怕问题,稳! 遇到问题只能靠自己时,并发出的力量是很强大的。 故障的产生: 应该是电脑被我踢了...
    哈森森阅读 22,002评论 0 1