如何在不杀死其他cmds的情况下杀死cmd进程?

时间:2018-08-01 16:02:33

标签: windows git batch-file jenkins

我正在处理应该启动进程(CMD)的批处理文件,然后在完成后应该终止该进程。问题是Imagename是cmd.exe,另一个问题是它应该在Jenkins上运行。 这是我测试过的:

  • 使用窗口名称通过wmic获取PID以查找进程->詹金斯失败
  • 通过命名窗口的Taskkill->失败,因为Jenkins没有 由于安全问题而显示窗口。
  • 按映像名的Taskkill->失败,因为还有其他cmd进程 同时运行
  • 使用pid但从上一个cmd开始为pid的Taskkill开始了。 -工程,但它是 不是很安全。

我无法理解wmic的工作原理,但正如我所见,我无法使用START命令之类的命令来启动进程。

条件:

  • 一段时间后无法杀死它,因为我需要从 mergetool有时可能会花费太长的时间。

  • 它应该与其他(cmd)进程同时运行// // Jenkins

我的问题是,有没有办法从START命令中获取PID?

有些问题对我有很大帮助! Windows batch file : PID of last process? Compare number of a specific process to a number

代码:

{{1}}

2 个答案:

答案 0 :(得分:1)

您实际上可以依靠文件starttask-before.txt来使用findstr来检查在task-after.txt命令行之后添加了哪些任务:

findstr /LXVG:task-before.txt task-after.txt

由于nasty bug,在某些情况下可能会导致意外输出。为防止这种情况,如果可以接受不区分大小写的搜索,请添加/I选项:

findstr /ILXVG:task-before.txt task-after.txt

答案 1 :(得分:0)

是的,这很有可能。我将从以前的awnser的代码中获取另一个文章:Stop Execution of Batch File after 20 Seconds and move to Next

我首先要假设“ mergetool_w”是您要与start一起使用的CMD的名称...

您要进行此操作的方法是在tasklist中搜索控制台标题,然后从上下文中提取PID#。后缀find可与tokens=2一起用于“过滤”结果,以仅提取PID#

FOR /F "tokens=2" %%# in ('tasklist /v ^| find "mergetool_w"') do set PID=%%#

现在,您可以使用taskkill /pid命令在此终止新窗口。 PID#存储在字符串%PID%中,因此命令很简单:

taskkill /pid %PID% /t /f

最后,似乎您正在尝试“记录”数据,因此可以随时将> text-task.txt放在需要的地方。