在 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 中,以这样的方式杀死批处理文件,使其子文件也被杀死的主要内容,如果未能解决你的问题,请参考以下文章

真正杀死Windows中的进程

你能以编程方式接受 UITextView 中的拼写更正吗?

如何使用 C 在 Linux 上以编程方式杀死进程树

在 C# 中以编程方式杀死进程树

如何使用 C++ 以编程方式杀死进程?

以编程方式从风暴螺栓中杀死拓扑时编译错误:对象和包具有相同的名称