【问题标题】:Process running after TASKKILLTASKKILL 之后运行的进程
【发布时间】:2016-03-23 18:21:14
【问题描述】:

问题与如下所示的脚本有关:

@echo on
:MAIN
start "myname" cmd /c "build\jre\bin\java -jar MainThread.jar"
timeout /t 2 >null
TASKLIST /v /fi "IMAGENAME eq cmd.exe">myfile.txt
TASKKILL /f /fi "IMAGENAME eq cmd.exe" /fi "WINDOWTITLE eq myname"
TASKLIST /v /fi "IMAGENAME eq cmd.exe">myfile2.txt
:exit

当我第一次执行任务列表时,我的名字被列在 TASKLIST 中。执行 taskkill 后,我的名字进程没有显示在 TASKKILL 之后执行的 TASKLIST 中,但它正在运行。虽然它的名字不在 TASKLIST 中,但它正在执行.TASKKILL 成功删除了它的条目,但没有终止进程。我应该如何终止该进程?

【问题讨论】:

  • 禁用反恶意软件并重试。如果是 Avast,请尽快卸载。
  • 杀死java进程而不是父cmd一个。有关基本说明,请参阅我的答案。
  • @JosefZ 谢谢它的工作。但我有一个疑问。如果有多个 jar 在运行并且我想识别一个特定的 jar,我将如何识别 jar,因为 WINDOWTITLE 显示 N/A?
  • wmic process where "Caption='java.exe'" get CommandLine, ProcessID /value。使用(两个)FOR /F 循环解析它,检查CommandLine,使用/PID 开关杀死。见my another answer。如果我的回答有帮助,请考虑将其标记为已接受。 See this page 解释为什么这很重要。

标签: windows batch-file


【解决方案1】:

启动java 进程占用父cmd 窗口名称,但不早于后父cmd 进程终止。使用没有安装java 的替代where 给出的证明(因为where.exe 运行了很长一段时间以截取屏幕截图甚至检查任务管理器)。

测试脚本

@echo on
:MAIN
start "myname" cmd /C where /R c:\ "whistle.*" 
@timeout /t 1 >null
TASKLIST /V /NH /fi "WINDOWTITLE eq myname" /FO "CSV"
TASKLIST /v /NH /fi "IMAGENAME eq Where.exe" /FO "CSV"
TASKKILL /f /fi "IMAGENAME eq cmd.exe" /fi "WINDOWTITLE eq myname"
TASKLIST /V /NH /fi "WINDOWTITLE eq myname" /FO "CSV"
:exit

输出

==> D:\bat\SO\36185868.bat

==> start "myname" cmd /C where /R c:\ "whistle.*"

==> TASKLIST /V /NH /fi "WINDOWTITLE eq myname" /FO "CSV"
"cmd.exe","3340","Console","1","2 240 K","Running","pcn\usern","0:00:00","myname"

==> TASKLIST /v /NH /fi "IMAGENAME eq Where.exe" /FO "CSV"
"where.exe","5188","Console","1","3 184 K","Unknown","pcn\usern","0:00:01","N/A"

==> TASKKILL /f /fi "IMAGENAME eq cmd.exe" /fi "WINDOWTITLE eq myname"
SUCCESS: The process with PID 3340 has been terminated.

==> TASKLIST /V /NH /fi "WINDOWTITLE eq myname" /FO "CSV"
"where.exe","5188","Console","1","3 184 K","Running","pcn\usern","0:00:01","myname"

==>

截图

【讨论】:

    【解决方案2】:

    谢谢你们的帮助。 我使用了 TASKKILL /f /t /fi "IMAGENAME eq cmd.exe" /fi "WINDOWTITLE eq myname" 命令。 /t 用于关闭所有子进程,其子进程之一的 java.exe 已关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2015-02-18
      • 2021-05-11
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多