美文网首页
windows 进程你需要知道的技巧

windows 进程你需要知道的技巧

作者: 极客消息 | 来源:发表于2019-08-28 11:31 被阅读0次

    问题引入

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

    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 平台哪些坑?又是如何解决的?欢迎留言探讨。

    相关文章

      网友评论

          本文标题:windows 进程你需要知道的技巧

          本文链接:https://www.haomeiwen.com/subject/dhjpectx.html