从批处理文件中终止Windows 16位进程

从批处理文件中终止Windows 16位进程,windows,batch-file,kill,kill-process,child-process,Windows,Batch File,Kill,Kill Process,Child Process,我遇到过这样的情况,一台使用Windows XP的旧计算机正在作为一个系统的服务器工作,当出现问题时,它有可能向我发送警报。然而,我们使用的这个服务器程序实际上是有缺陷的,并且在某个特定时刻可以停止关心警报。当程序最终重新启动时,这些警报会堆积起来,并立即发送。这使得这些警报变得毫无用处,因为当你重新启动程序时,你已经知道系统出了问题 我想要的解决方案是,Windows任务调度器可以每晚在一个简单的批处理文件的帮助下杀死并重新启动程序。不过,我似乎找不到杀死进程的方法,因为该程序的进程是作为Wi

我遇到过这样的情况,一台使用Windows XP的旧计算机正在作为一个系统的服务器工作,当出现问题时,它有可能向我发送警报。然而,我们使用的这个服务器程序实际上是有缺陷的,并且在某个特定时刻可以停止关心警报。当程序最终重新启动时,这些警报会堆积起来,并立即发送。这使得这些警报变得毫无用处,因为当你重新启动程序时,你已经知道系统出了问题

我想要的解决方案是,Windows任务调度器可以每晚在一个简单的批处理文件的帮助下杀死并重新启动程序。不过,我似乎找不到杀死进程的方法,因为该程序的进程是作为Windows进程csrss.exe的子进程运行的

如果我打开taskmanager,我可以看到进程并将其终止,但是命令
tasklist
仅显示父进程csrss.exe,我需要PID来使用
taskkill
终止它。是的,
tasklist
确实有额外的参数
/t
,该参数也会杀死子进程,但我需要一种只杀死子进程的方法,并让Windows csrss.exe继续运行

所以我的问题是:有人知道如何在批处理文件的帮助下只杀死一个子进程吗

这当然可以通过为此编写一个特定的程序来完成,然后让批处理文件使用该程序,但我希望能找到一个快速修复方法

到目前为止,我已经:

TASKLIST /FI "IMAGENAME eq program.exe" 2>NUL | FIND /I /N "program.exe">NUL
IF NOT %ERRORLEVEL%==0 GOTO :restart
TASKKILL /FI "IMAGENAME eq program.exe" /F /T

:restart
START /D "C:\path\" program.exe
编辑:


我刚刚意识到一个进程的映像名在任务管理器中没有缩进,因为它是另一个进程的子进程,而是因为它是一个16位进程(多么直观)。所以,这是一个16位进程,现在的问题是如何找到一个PID来终止或终止一个16位进程<代码>任务列表,正如我提到的,没有显示它,
pslist
,我想我已经设法解决了我的问题,我把这个留给任何可能遇到类似问题的人

我试图杀死进程ntvdm.exe,因为它可以通过
tasklist
taskkill
访问,而且谷歌搜索显示它是Windows的虚拟机,允许16位程序在32位系统上运行。我首先尝试在不强制的情况下杀死它,但这只杀死了ntvdm.exe,而不是16位进程本身。然而,强制它似乎可以正常工作,尽管我不推荐这种解决方案(出于明显的原因),因为在任何有多个基本16位进程运行的地方

我最终使用的命令是:

TASKKILL /FI "IMAGENAME eq ntvdm.exe" /F /T

您需要回答的问题是“为什么任务列表不向我显示该进程?”它是16位进程吗?您是否尝试过使用pslist而不是tasklist?是的,这是一个16位的过程-这就是tasklist没有显示任何内容的原因吗?是否有一种方法可以同时显示16位进程?我试图安装pstools和pslist,但它也找不到进程。我不知道是否有预先制作的东西,但应该是在NT family Windows版本下管理16位任务的相关API。谢谢你,Matteo。不过,我认为通过强制终止名为ntvdm.exe的进程,问题自行解决了。但如果仍然出现问题,我会尝试一下。