gpt4 book ai didi

windows - 为什么非交互式批处理脚本认为我按下了 control-C?

转载 作者:可可西里 更新时间:2023-11-01 12:42:56 27 4
gpt4 key购买 nike

所以当突然出现在输出日志中时,我的批处理脚本运行良好:

21:27:13.99 c:\apps\w7lab-scripting>some-command
Error 3221225786
^CTerminate batch job (Y/N)?

然后脚本停止运行。

批处理脚本在 session 零中运行,所以我知道它没有收到真正的 control-C,而且我的代码都没有调用 GenerateConsoleCtrlEvent,所以不可能。唯一的线索是 some-command 当时正在与一个交互式应用程序通信,并且那个应用程序的控制台收到了一个 control-C。 some-command 的预期行为是显示其他应用程序的退出代码,然后使用相同的代码退出。如果批处理脚本没有停止,它会适本地处理错误。

这是怎么回事?

最佳答案

这里的魔法在于退出代码 3221225786,又名 0xC000013A 或 STATUS_CONTROL_C_EXIT。

交互式应用程序收到了一个 control-C,但没有捕捉到它,所以正如预期的那样,它以 STATUS_CONTROL_C_EXIT 中止。 some-command 应用程序正确地将此报告为远程应用程序的退出代码,并将其传递回批处理脚本。

我没有意识到的是,cmd.exe 通过检查子进程是否返回 STATUS_CONTROL_C_EXIT 来检测批处理脚本中的 control-C。因此,通过返回此错误代码,我无意中停止了批处理脚本。

这可以用一个简单的批处理脚本来演示:

cmd /c exit 3221225786
echo hello

运行时生成

C:\working\test>cmd /c exit 3221225786
^CTerminate batch job (Y/N)?

关于windows - 为什么非交互式批处理脚本认为我按下了 control-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25444765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com