windows - 在 Windows 中以其子项也被杀死的方式杀死批处理文件

标签 windows batch-file cmd

我需要从 cmd 启动一个 exe(包装 exe 以便我可以提供一些命令行选项)。问题是仅仅从 cmd 调用 exe 并不能使包装完全透明:如果 .exe 挂起,杀死 cmd 不会杀死 exe。我也需要它来杀死 exe。我可以在普通 Windows 中(从 XP 开始)执行此操作而不添加任何依赖项吗?

在 Bash 中,您有 exec,它用提供的命令替换 shell 进程。这对于编写包装器脚本很方便,使包装过程完全透明。我知道 Windows 缺少使这成为可能的 execve(),但我只对 parent-killing-its-children 部分感兴趣。

澄清:我不是在寻找杀死 exe 的方法,我是在寻找包装(启动)exe 的方法,以便使用标准方式(例如 Ctrl+C 或来自任务管理器)有效。例如,我可以创建一个 lnk 文件(Windows 快捷方式)并获得此行为,但我想从脚本中执行此操作(例如,lnks 仅适用于绝对路径,我无法部署那个)。

谢谢。

最佳答案

Taskkill 可用于匹配特定条件。通过输入 Taskkill/?,您可以获得手册并可以阅读有关如何使用通用属性进行过滤的信息。我假设您所有的 child 在他们的名字中都有一个共同的部分。您可以使用 taskkill 对带有通配符的名称进行数学运算,并关闭所有与该名称匹配的子项。


编辑(摘自评论部分): 正如 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

关于windows - 在 Windows 中以其子项也被杀死的方式杀死批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20892102/

相关文章:

windows - 如何使用 Perl 在 Windows 上检测打开的文件句柄的文件是否已被删除?

php - 为什么 PHP 执行时会出现 'node' ' 无法识别为内部或外部命令、可运行程序或批处理文件?

c++ - 检测在编辑控件中输入

java - 无法编译和执行java程序

windows - xcopy - 复制至少一个与模式匹配的文件

batch-file - bat 游戏。使用 set/p 添加计时器

batch-file - 在 for 循环中使用 if 语句

visual-studio - 为什么 Visual Studio 中的所有预生成或生成后事件都失败并显示退出代码 1?

batch-file - .bat 停止 windows 更新

c++ - 使用 Win32 执行命令