在 Windows 中,以这样的方式杀死批处理文件,使其子文件也被杀死
Posted
技术标签:
【中文标题】在 Windows 中,以这样的方式杀死批处理文件,使其子文件也被杀死【英文标题】:Kill batch file in such a way that its children are killed too, in Windows 【发布时间】:2014-01-20 10:35:28 【问题描述】:我需要从cmd
启动exe
(包装exe,以便我可以提供一些命令行选项)。问题是仅仅从 cmd 调用 exe 并不能使包装完全透明:如果 .exe 挂起,杀死 cmd 不会杀死 exe。我也需要它来杀死exe。我可以在普通 Windows(从 XP 以上)中做到这一点,而不添加任何依赖项吗?
在 Bash 中,您有 exec
,它将 shell 进程替换为提供的命令。这对于编写包装脚本很方便,使包装过程完全透明。我知道 Windows 缺少 execve()
使这成为可能,但我只对 parent-killing-its-children 部分感兴趣。
澄清:我不是在寻找杀死 exe 的方法,而是在寻找 wrap(启动)exe 的方法,以便使用标准方式(例如 Ctrl+C 或来自任务管理器)的作品。例如,我可以创建一个lnk
文件(Windows 快捷方式)并获得此行为,但我想从脚本中执行此操作(例如,lnk 仅适用于绝对路径,我无法部署它)。
谢谢。
【问题讨论】:
【参考方案1】:Taskkill
可用于匹配某些条件。通过输入Taskkill/?
,您可以获得手册,并可以阅读有关如何使用常用属性进行过滤的信息。我假设你所有的孩子都以他们的名字共享一个共同的部分。您可以使用 taskkill 使用通配符计算名称并关闭与该名称匹配的所有子项。
编辑(取自 cmets 部分):
正如 IInspectable 指出的那样,您可以使用 /T
标志终止所有子进程。
从批处理开始编辑,您可以使用START
(reference here) 与批处理并行启动 exe 并在批处理中中止。
编辑我编写并测试了这个迷你示例:
@echo off
echo starting %1
start %1
echo Any key to kill execution
pause >> NUL
taskkill /IM %1 /t
【讨论】:
无需过滤文件名。/T
参数已经足够好了。完整参考:Taskkill.
谢谢,但我希望能够使用通常的方法杀死批处理文件,因为我从代码编辑器 (SciTE) 启动它,并且我希望能够使用 Ctrl+Break 从编辑。这就是为什么透明的包装方式对我来说很重要。如果 cmd 不能做到这一点,我将制作一个 C 包装器,但我想确保在将整个 C 工具链作为依赖项之前:)
也许你应该在这里问这个问题——你解决的问题很可能已经解决了。
这篇文章可能有你的答案superuser.com/questions/727724/…【参考方案2】:
taskkill /F /IM iexplore.exe
/F
强制杀死。
可以杀死子进程 例如https://www.windows-commandline.com/taskkill-kill-process/
【讨论】:
以上是关于在 Windows 中,以这样的方式杀死批处理文件,使其子文件也被杀死的主要内容,如果未能解决你的问题,请参考以下文章