[ 2006-9-15 23:47:00 | By: hkzj ]
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以上才有。