使用批处理关闭进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用批处理关闭进程相关的知识,希望对你有一定的参考价值。

写一个BAT文件 双击运行

要求:

1、关闭进程 (如aaa.exe)

2、关机

我还是贴上来吧

呵呵

比较常用的,比如: taskkill /f /im Explorer.exe (关闭Explorer.exe进程)

具体可以参照:

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] 列出所有其中符合指定模式名
的 DLL 模块的所有任务。
如果没有指定模块名,则
显示每个任务加载的所有模块。

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

/V 指定要显示详述
信息。

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

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

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

/? 显示帮助/用法。

筛选器:
筛选器名 有效操作符 有效值
----------- --------------- --------------
STATUS eq, ne 正在运行 | 没有响应
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 用户名,格式为 [domain\]user

SERVICES eq, ne 服务名
WINDOWTITLE eq, ne 窗口标题
MODULES eq, ne DLL 名

例如:
TASKLIST
TASKLIST /M
TASKLIST /V
TASKLIST /SVC
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U domain\username /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

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

描述:
这个命令行工具可用来结束至少一个进程。
可以根据进程 id 或图像名来结束进程。

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

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

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

/F 指定要强行终止
进程。

/FI filter 指定筛选进或筛选出查询的
的任务。

/PID process id 指定要终止的进程的
PID。

/IM image name 指定要终止的进程的
图像名。通配符 '*'
可用来指定所有图像名。

/T Tree kill: 终止指定的进程
和任何由此启动的子进程。

/? 显示帮助/用法。

筛选器:
筛选器名 有效运算符 有效值
----------- --------------- --------------
STATUS eq, ne 运行 | 没有响应
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 窗口标题

注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。

注意: 远程进程总是要强行终止,
不管是否指定了 /F 选项。

例如:
TASKKILL /S system /F /IM notepad.exe /T
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM notepad.exe /IM mspaint.exe
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 domain\username /FI "USERNAME ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
参考技术A dos关机命令
关键词: dos

shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "comment"] [-d up:xx:yy]

没有参数 显示此消息(与 ? 相同)
-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)

-f:强行关闭应用程序

-m \\计算机名:控制远程计算机

-i:显示图形用户界面,但必须是Shutdown的第一个选项

-l:注销当前用户

-r:关机并重启

-t时间:设置关机倒计时

-c "消息内容":输入关机对话框中的消息内容(不能超127个字符)
参考技术B 在CMD模式下结束某一进程
一:
通过tasklist 可以查找到相关进程的PID。

语法:tasklist /svc

通过taskkill pid 可以关掉进程。

语法: taskkill /im 进程名 /f

二:
ntsd -c q -p PID 可以强行结束运行进程

.
shutdown.exe -s -f
此命令可以强制关闭计算机.
参考技术C @echo off
taskkill /f /im aaaa.exe
ping /n 2 127.0.0.1 >nul
shudown -s
参考技术D @echo off
taskkill /f /im aaaa.exe
ping /n 2 127.0.0.1 >nul
shutdown -r -t 0
exit本回答被提问者采纳

批处理脚本查找进程PID [关闭]

【中文标题】批处理脚本查找进程PID [关闭]【英文标题】:Batch script find process PID [closed] 【发布时间】:2021-04-15 08:00:55 【问题描述】:

如果它的 cmd 命令行包含非常具体的关键字,我正在开发一个杀死进程的工具。

我使用 C# 编写了一个小程序,但它在一些未安装 .NET 的旧系统上失败了。

我需要你的帮助来获得任何提示或 sn-ps 以将我的 c# 代码转换为批处理脚本。

非常感谢

public static int GetSysmonLockerProcess()
        
            try
            
                var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT Name, CommandLine, ProcessId, Caption, ExecutablePath FROM Win32_Process");
                var collection = searcher.Get();

                foreach (var o in collection)
                
                    var obj = (ManagementObject)o;

                    var type = obj["Process"]?.ToString().ToLower();
                    var commandLine = obj["CommandLine"]?.ToString();
                    var procId = obj["ProcessId"]?.ToString().ToLower();
                    var name = obj["Name"]?.ToString().ToLower();

                    int.TryParse(procId, out var pid);
                    if (pid == 0)
                        continue;

                    if (string.IsNullOrEmpty(commandLine))
                        continue;

                    if (name == "cmd.exe" && type == "process" && commandLine.Contains("TA-Sysmon-deploy") && commandLine.Contains("SplunkUniversalForwarder") && (commandLine.Contains("deploy.bat") || commandLine.Contains("deploy2.bat")))
                        return pid;
                

                return -1;
            
            catch (Exception)
            
                return -1;
            
        

【问题讨论】:

您应该能够使用 WMIC 实用程序检索您需要的信息。这是一个单行批处理文件命令示例,供您测试或用作基础:@WMIC Process Where "CommandLine Like '%%TA-Sysmon-deploy%%' And CommandLine Like '%%SplunkUniversalForwarder%%' And CommandLine Like '%%deploy.bat%%' And Name='cmd.exe' Or CommandLine Like '%%TA-Sysmon-deploy%%' And CommandLine Like '%%SplunkUniversalForwarder%%' And CommandLine Like '%%deploy2.bat%%' And Name='cmd.exe'" Call Terminate。请注意,这假设您的旧系统至少为 XP Pro/Server 2003。 还请注意,本网站不应该回答代码请求,或为人们在语言之间转换代码。在您编写自己的代码并编辑您的问题以显示它并解释它未能完成所需的操作之前,您的问题是题外话。 【参考方案1】:

这是我编写的代码

@echo off
cls
title Process_Killer
:loop
echo --------- Process_Killer ---------
echo 1: Show all Tasks
echo 2: Kill Task by PID
echo 3: Kill Task by name
echo 4: Exit
set choice=
set /p choice=Choice:
if not '%choice%'=='' set choice=%choice:~0,1%
if '%choice%'=='1' goto show_tasks
if '%choice%'=='2' goto kill_by_pid
if '%choice%'=='3' goto kill_by_name
if '%choice%'=='4' goto Exit
goto error
:show_tasks
tasklist
pause 
:kill_by_pid
set pid=
set /p pid=Enter PID:
taskkill /F /PID %pid%
goto loop
:kill_by_name
set name=
set /p name=Enter process name:
taskkill /im %name% /f
goto loop
:Exit
exit
:error
echo Error:Unidentified input
goto loop

【讨论】:

【参考方案2】:

作为批处理文件行,

for /f "tokens=2" %%P in ('tasklist /v ^|findstr /b /i /L /c:"cmd.exe "^|findstr /i /L /c:"wd5"') do echo taskkill /PID %%P

其中wd5 是我用作目标的字符串,这仅仅是因为我的系统上碰巧有一个cmd 进程,并以该字符串作为其参数。

echo 只是导致建议的taskkill 命令显示在控制台上。一旦您确认该过程可靠地选择了正确的 PID,请删除上述 echo 关键字以执行 taskkill

tasklist/v 命令生成一个 (/v) 当前任务的详细列表。第一个findstr 查找那些/b/L 文字字符串/c: 常量字符串开头的行(因为它故意包含空格)“在引号中” /i -case -不敏感。

下一个findstr 选择包含关键字wd5 的剩余行。

^ 转义管道以告知 cmd'single-quoted command to be executed' 的一部分,而不是封闭的 for

for 处理来自'quoted command' 的任何行,使用默认分隔符(包括空格)对其进行标记,并将第二个标记分配给使用的元变量%%P作为DO的命令。

所以 - 不需要 C# 异端。

【讨论】:

以上是关于使用批处理关闭进程的主要内容,如果未能解决你的问题,请参考以下文章

通过进程 ID 查找进程名称 [关闭]

批处理脚本查找进程PID [关闭]

windows下有没有kill命令,如何使用kill 结束进程,如关闭浏览器~~ 谢谢

批处理文件不会杀死进程并关闭控制台窗口

积累如何优雅关闭SpringBoot Web服务进程

积累如何优雅关闭SpringBoot Web服务进程