Board logo

标题: [求助]ntsd关闭进程的问题? [打印本页]

作者: tempuser     时间: 2008-10-27 14:40    标题: [求助]ntsd关闭进程的问题?

ntsd关闭进程的问题?
1,假设notepad.exe的PID是2328,我现在在DOS下执行以下命令是成功的:
ntsd    -c    q    -p    2328
但我在批处理这样运用它,却失败了:
@echo    off
set    /p    closeprocess=    请输入你要强制关闭的进程PID   
ntsd    -c    q    -p    "%closeprocess%"
goto :eof
错误提示如下:
Unable to find process '2328', HRESULT 0x80004002
    "不支持此接口"
ntsd: exiting - press enter ---
为什么?

2.另外,请教wmic  process   delete的具体用法,它的这个delete是否也是强制删除进程的,包括一些系统进程?

在线等待中......
作者: HAT     时间: 2008-10-27 14:59

@echo off
tasklist|findstr /i "notepad.exe"
echo.
set /p closeprocess=请输入你要强制关闭的进程PID
ntsd -c q -p %closeprocess%

作者: tempuser     时间: 2008-10-27 15:37
执行后没有出错提示了,但不能关闭进程。
%closeprocess%加"%closeprocess%"没什么影响。
作者: tempuser     时间: 2008-10-27 17:00
为什么啊!
ntsd在DOS下好使,在批处理中却失败呢?
找了半天,有参数理解的收获,但就是不好使啊!

ntsd  -c  q  -pn   
c  :command
q  :quit
p  :pid
n  :processname
例:
ntsd  -c  q   -pn  notepad.exe

ntsd  -c q  -p  2696
作者: newsuper     时间: 2008-10-27 23:17
如果ntsd不行,试试taskkill啊,很好用的
taskkill /pid  xxx
一直用这个。
作者: HAT     时间: 2008-10-27 23:30    标题: Re 4楼


@echo off
tasklist|findstr /i "notepad.exe"
echo.
set /p closeprocess=请输入你要强制关闭的进程PID
ntsd -c q -p %closeprocess%
tasklist|findstr /i "notepad.exe"
echo.
能否把你的结果贴出来看看?
这是我的:

作者: slore     时间: 2008-10-27 23:47
用taskkill把ntsd结束掉^

ntsd结束进程有时候ntsd的窗口会停留,关闭才能结束
作者: newsuper     时间: 2008-10-28 00:22
好像taskkill 在批处理中也不能用,以前只是在命令行用过。
作者: HAT     时间: 2008-10-28 00:32    标题: Re 8楼

你听谁说的?还是亲自测试过?能把你的测试代码和结果贴出来看看么?
作者: newsuper     时间: 2008-10-28 00:54
不知道是不是电脑出了问题,还是程序有问题。
下面的 taskkill 在for循环批处理里不能使用。
for /f "tokens=1,2" %%i in ('tasklist.exe') do if %%i ==notepad.exe taskkill /pid %%j
但是 如果只有这一条的话:taskkill /im notepad.exe,却可以使用,就是不放在for循环里面。
还有其他的,感觉好像taskkill 不支持变量一样。
还望高人指点。

  今天又测试了一下,发现是程序的问题 应该把%%i==notepad.exe 改为"%%i"=="notepad.exe",就是加上引号。
  以下是测试程序,很简单的。
@echo off
start /min notepad.exe
for /f "tokens=1,2" %%i in ('tasklist.exe') do if "%%i"=="notepad.exe" echo %%j
set /p cp=请输入你要结束的进程的PID
taskkill /pid %cp%

[ Last edited by newsuper on 2008-10-28 at 19:10 ]
作者: tempuser     时间: 2008-10-28 07:59
我确实测试了很多遍,我也截了图,到我不会把图传上来,能告诉我怎么做吗?
我试试附件吧!有两个图
附件 1: 2.JPG (2008-10-28 07:59, 39.8 K)



作者: tempuser     时间: 2008-10-28 08:04
第2个,因为一直提示要输入的notepad.exe的PID,没办法,主动关闭了CMD窗口.
再重新进入到CMD下,执行
tasklist | findstr /i "notepad.exe"
看到notepad.exe还在那,没有关闭.我在座测试前运行的一个记事本文件也在任务栏下好好的呆着,根本没有关闭,所以我说ntsd的这段代码不好使.

我之所以没有用tasklist关闭进程,是因为我曾经看到过一些资料说:
ntsd能关闭一些tasklist无法关闭的进程.
这种说法对吗?
附件 1: 4.JPG (2008-10-28 08:04, 38.48 K)



作者: newsuper     时间: 2008-10-28 19:21    标题: 我用ntsd结束了记事本程序

我用ntsd结束了记事本程序啊
方法跟我10楼的一样,只是把最后一句taskkill换成了ntsd了。不知道大家是什么结果?
@echo off
start /min notepad.exe
for /f "tokens=1,2" %%i in ('tasklist.exe') do if "%%i"=="notepad.exe" echo %%j
set /p cp=请输入你要结束的进程的PID
ntsd -c q -p %cp%
作者: HAT     时间: 2008-10-28 20:51    标题: Re 12楼

你这个截图用的是6楼的代码么?
作者: tempuser     时间: 2008-10-29 10:49
回斑竹HAT:绝对用的是6楼的代码,结果正如我的贴图,不能关闭进程.

问newsuper:你能把你测试的过程贴图出来吗?我根本就不能关闭notepad.exe进程?
作者: everest79     时间: 2008-10-29 11:46
NTSD 调试程序在启动时要求用户指定一个要连接的进程。使用 TLIST 或 PVIEWER,您可以获得某个现有进程的进程 ID,然后键入 NTSD -p pid 来调试这个进程。NTSD 命令行使用如下的句法:

NTSD [options] imagefile

其中,imagefile 是要调试的映像名称,options 是下面选项之一:

表 1. NTSD 映像文件选项

选项 说明
-2 打开一个用于调试字符模式的应用程序的新窗口
-d 将输出重定向到调试终端
-g 使执行自动通过第一个断点
-G 使 NTSD 在子程序终止时立即退出
o 启用多个进程的调试,默认值为由调试程序衍生的一个进程
-p 指定调试由进程 ID 标识的进程
-v 产生详细的输出


例如,假设 inetinfo.exe 的进程 ID 为 104。键入以下命令将 NTSD 调试程序连接到 inetinfo 进程 (IIS)。

NTSD -p 104

也可使用 NTSD 启动一个新进程来进行调试。例如,NTSD notepad.exe 将启动一个新的 notepad.exe 进程,并与它建立连接。

一旦连接到某个进程,您就可以用各种命令来查看堆栈、设置断点、转储内存,等等。

表 2. 常用命令

命令 含义
~ 显示所有线程的一个列表
KB 显示当前线程的堆栈轨迹
~*KB 显示所有线程的堆栈轨迹
R 显示当前帧的寄存器输出
U 反汇编代码并显示过程名和偏移量
D[type][<range>] 转储内存
BP[#] <address> 设置断点
BC[<bp>] 清除一个或多个断点
BD[<bp>] 禁用一个或多个断点
BE[<bp>] 启用一个或多个断点
BL[<bp>] 列出一个或多个断点


做个实验看看
例如你系统进程 1234为notepad.exe
执行ntsd -p 1234打开调试窗口
输入q
ntsd退出,被关联的进程也跟着退了了

ntsd不能终止的进程是其进程根本就不充许连接或丢弃这样的请求,再有就是最低需要administrator才有80%的保障会结束你选择的进程,system权限大概会有95%吧,嘿嘿
ntsd其实是一个debug程序,关闭进程是利用了ntsd退出时会终止与其关联的程序
作者: kgdetg1127     时间: 2008-10-29 15:22
批处理使用了NTSD.EXE命令,问题出在你的批处理的命名,使用了"NTSD"字眼,命名为1.bat试试。
作者: newsuper     时间: 2008-10-29 19:47
为了跟楼主保持一致,我用6楼的代码测试了一遍,只是加了一条打开记事本的语句。
   结果跟HAT版主的一样啊。


作者: newsuper     时间: 2008-10-29 19:50


  Quote:
Originally posted by kgdetg1127 at 2008-10-29 15:22:
批处理使用了NTSD.EXE命令,问题出在你的批处理的命名,使用了"NTSD"字眼,命名为1.bat试试。

这个问题我也有同感,前天写了一个小东西,里面就一条 msg /w %username%  呵呵
  保存为msg.bat,结果怎么也运行不了,后来换了文件名才可以运行了,真是需要注意啊。
作者: HAT     时间: 2008-10-29 19:53    标题: Re 18楼

为节约论坛空间以及加快他人访问速度,上传图片时请勿使用bmp格式,推荐使用png/jpg/gif等格式。