以一种方式杀死Windows中的批处理文件,使其子进程也被终止

11
我需要从cmd中启动一个exe文件(包装exe文件,以便我可以提供一些命令行选项)。问题在于,仅仅从cmd调用exe并不能完全透明地进行包装:如果.exe挂起,杀死cmd不会杀死exe。我需要它也能杀死exe。在纯Windows环境下(从XP开始),我可以这样做吗,而不添加任何依赖项?
在Bash中,您可以使用exec将shell进程替换为提供的命令。这对编写包装器脚本非常有用,使包装过程完全透明。我知道Windows缺少execve()使这成为可能,但我只对父进程杀死其子进程部分感兴趣。
澄清:我不是在寻找杀死exe的方法,我正在寻找包装(启动)exe的方法,以便使用标准方式(例如Ctrl + C或从任务管理器)杀死它。例如,我可以创建一个lnk文件(Windows快捷方式)并获得此行为,但我想从脚本中执行它(首先,lnks仅适用于绝对路径,我无法部署它)。
谢谢。
2个回答

0

Taskkill 可以用于匹配特定的条件。通过输入 Taskkill/?,您可以获得手册并了解如何使用常见属性进行过滤。我假设您所有的子进程名称都有共同的部分。您可以使用 taskkill 使用通配符匹配名称,并关闭所有匹配该名称的子进程。


编辑(来自评论部分): 正如IInspectable所指出的,您可以使用/T标志杀死所有子进程。


如果从批处理文件开始,您可以使用START参考文献)并行启动exe,并在批处理中进行中止。

编辑:我编写并测试了这个小例子:

@echo off
echo starting %1
start %1
echo Any key to kill execution
pause >>  NUL
taskkill /IM %1 /t

2
不需要按文件名过滤,只需使用“/T”参数即可。完整参考:Taskkill - IInspectable
谢谢,但我想要能够使用通常的方法杀死批处理文件,因为我是从代码编辑器(SciTE)启动它,并且我希望能够使用编辑器中的Ctrl+Break来杀死它。这就是为什么对于包装的透明性对我来说很重要。如果cmd不能做到这一点,我会制作一个C包装器,但在我将整个C工具链作为依赖之前,我想确保一下 :) - user519179
也许你应该在这里问这个问题 - 很可能你要解决的问题已经被解决了。 - Johannes
这篇文章可能会有你需要的答案 https://superuser.com/questions/727724/close-programs-from-the-command-line-windows - user12489103

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接