无法终止包括 cmd 处理程序在内的 exe 任务

无法终止包括 cmd 处理程序在内的 exe 任务

start /B "ngrok" call ngrok.exe tcp 22 -log=stdout > ngrok.log每当我尝试使用taskkill ( ) 终止 ngrok.exe 任务( taskkill /IM ngrok.exe /F) 时,它都不起作用。显然我终止了 ngrok.exe 进程,但 Windows 命令提示符 (会话处理程序) 仍然存在。

当我尝试再次运行该 exe 时,它​​显示:The process cannot access the file because it is being used by another process.


我也尝试过添加/Ttaskkill 并删除所有子进程,但还是不行。有什么解决办法吗?


采取任何行动之前

启动 ngrok 后

taskkill之后

答案1

我看到的问题是您在命令call中使用该命令start

call仅用于批处理过程中调用其他批处理过程中的功能(通过标签或文件)。

例如:
call :MyLabel <- 其中 MyLabel 是在同一文件中定义的标签。

call "c:\mypath\dumb.bat"<- 此批处理运行后,它将从此处继续

在这种情况下,这不是您想要的,因为这些是呼叫的唯一用途。

关于 call 命令的快速课程

此外,即使这不是您想要的,因为我们正在讨论何时使用call,为什么不简单地使用goto或直接调用批处理文件呢?

标签方法的原因是,它call可以通过调用批处理标签像函数一样使用。调用标签后,标签后面的代码(有点像函数)可以通过在批处理中使用或创建goto :EOF非常exit /b“类似函数”的行为返回到调用语句的位置。 以前,这就像在基本中使用GoSub一样。Return

如果在从另一个批处理文件调用批处理文件时不使用call,则在调用第二个批处理文件后,该过程将会退出(让人困惑批处理停止的原因)。

否则,不要使用它!:)

相关内容