我有这样一种情况,一个安装有Windows XP的旧电脑作为系统的服务器,可以在出现问题时向我发送警报。但是,我们使用的服务器程序非常容易出错,并且在某些时候可能会突然停止关注警报。这些警报就会堆积起来,在程序最终重新启动时一次性全部发送。这使得这些警报变得毫无用处,因为在重新启动程序时,您已经知道系统出了什么问题。
我的解决方案是,Windows任务计划程序每晚都可以使用简单的批处理文件杀死并重新启动程序。但我似乎找不到一种方法来杀死进程,因为该程序的进程作为Windows进程csrss.exe的子进程运行。
如果我打开任务管理器,我可以看到该进程并将其终止,但命令
因此,我的问题是:有没有人知道如何仅通过批处理文件结束子进程?
当然,这可以通过编写特定的程序来完成,然后让批处理文件使用该程序,但我希望有一个快速解决方案。
到目前为止,我已经:
我的解决方案是,Windows任务计划程序每晚都可以使用简单的批处理文件杀死并重新启动程序。但我似乎找不到一种方法来杀死进程,因为该程序的进程作为Windows进程csrss.exe的子进程运行。
如果我打开任务管理器,我可以看到该进程并将其终止,但命令
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位进程。正如我之前提到的,Tasklist
没有显示它,pslist
也没有。