一、CMD中可执行的结束进程命令(其实是一个远程关机工具)
ntsd -c q -p pid (pid 为进程标识符,在任务管理器中可以调出这一属性列)
例:
如explorer.exe的pid为1332,则
运行:
ntsd -c q -p 1332就能结束explorer.exe进程
ntsd -c q -pn ***.exe (***.exe 为进程名,exe不能省)
例:
运行:ntsd -c q -pn explorer.exe就结束explorer.exe进程
二、应用
因为这个命令要比任务管理器中的结束进程功能强,所以我另外做了一个进程结束器,以VB为环境,利用ntsd命令和shell函数就能搞出来了。
思路:
先创建一个批处理文件(直接让CMD接受命令变量感觉不行,而这个文件可以直接在CMD中执行),,预先写入ntsd -c q -p ,然后接受输入的pid,传送PID到BAT文件,点击按钮执行BAT文件。
因为涉及文件操作,所以要在工程中引用microsoft scripting runtime
下面是代码:
Dim ts As New FileSystemObject
Dim tf As TextStream
Private Sub Command1_Click()
Set ts = CreateObject("Scripting.FileSystemObject")
Set tf = ts.CreateTextFile("d:\1.bat")
tf.Write ("ntsd -c q -p ") '预先写好前段命令
tf.Write (Text1.Text) '等待写入进程PID
tf.Close
Shell "D:\1.bat", vbMinimizedFocus '最小化执行结束进程命令
Text1.Text = ""
End Sub
Private Sub Form_Unload(Cancel As Integer)
Shell "cmd /c del d:\1.bat", vbMinimizedFocus '关闭时删除临时文件
End Sub
另外一个程序,这个是用输‘进程名’并用‘winexec’来结束进程的代码:
Dim ts As New FileSystemObject
Dim tf As TextStream
Dim df As File
Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
Private Sub Command1_Click()
Set ts = CreateObject("Scripting.FileSystemObject")
Set tf = ts.CreateTextFile("d:\1.bat")
tf.Write ("ntsd -c q -pn ") '预先写好前段命令
tf.Write (Text1.Text) '等待写入进程PID
tf.Close
WinExec "D:\1.bat", 3 '执行命令
Text1.Text = ""
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set df = ts.GetFile("d:\1.bat")
ts.DeleteFile (df) '关闭时删除临时文件,跟上面方法不一样
End Sub
其实taskkill的进程控制功能更强,不过只有WINXP以上才有。
1. wmic + process
在“开始->运行”中输入wmic命令,然后会弹出一个类似DOS窗口的界面,其命令提示符为“wmic:root\cli>”。在该命令提示符下输入process命令,就会看到系统所有进程的详细信息,下面只截取了其中前两列信息,通过输出的信息我们就可以知道各个进程对应的exe文件。
wmic:root\cli>process
Caption CommandLine
System Idle Process
System
smss.exe \SystemRoot\System32\smss.exe
winlogon.exe winlogon.exe
services.exe C:\WINDOWS\system32\services.exe
lsass.exe C:\WINDOWS\system32\lsass.exe
svchost.exe C:\WINDOWS\system32\svchost -k DcomLaunch
svchost.exe C:\WINDOWS\system32\svchost -k rpcss
svchost.exe C:\WINDOWS\System32\svchost.exe -k netsvcs
svchost.exe C:\WINDOWS\system32\svchost.exe -k NetworkService
svchost.exe C:\WINDOWS\system32\svchost.exe -k LocalService
spoolsv.exe C:\WINDOWS\system32\spoolsv.exe
explorer.exe C:\WINDOWS\Explorer.EXE
TSVNCache.exe "D:\Program Files\TortoiseSVN\bin\TSVNCache.exe"
HControl.exe "C:\WINDOWS\ATK0100\HControl.exe"
ctfmon.exe "C:\WINDOWS\system32\ctfmon.exe"
ATKOSD.exe ATKOSD.exe
svchost.exe C:\WINDOWS\System32\svchost.exe -kbdx
alg.exe C:\WINDOWS\System32\alg.exe
TOTALCMD.EXE "D:\Program Files\TotalCmd\TOTALCMD.EXE"
avant.exe "D:\Program Files\Avant Browser\avant.exe"
conime.exe C:\WINDOWS\system32\conime.exe
taskmgr.exe taskmgr.exe
wmic.exe "C:\WINDOWS\System32\Wbem\wmic.exe"
wmiprvse.exe C:\WINDOWS\system32\wbem\wmiprvse.exe
2. tasklist
在“开始->运行”中输入cmd命令,然后在弹出的DOS窗口中输入tasklist命令,此时会显示出各个进程的名称、ID号、内存使用情况等。此外tasklist命令还可以带各种参数,如使用/svc参数会显示每个进程中的服务;使用/v会显示详细信息。
使用“tasklist /?”可以查看所有的命令参数。
图像名 PID 会话名 会话# 内存使用
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 16 K
System 4 Console 0 124 K
smss.exe 588 Console 0 456 K
csrss.exe 644 Console 0 4,664 K
winlogon.exe 668 Console 0 1,176 K
services.exe 712 Console 0 2,256 K
lsass.exe 724 Console 0 1,584 K
svchost.exe 876 Console 0 3,308 K
svchost.exe 944 Console 0 3,028 K
svchost.exe 1040 Console 0 11,064 K
svchost.exe 1108 Console 0 1,996 K
svchost.exe 1180 Console 0 2,344 K
spoolsv.exe 1340 Console 0 3,264 K
explorer.exe 1532 Console 0 13,276 K
|