Windows 中是否有与 Unix Shell 的“exec”等效的功能?基本上,我需要避免分叉新进程,以便保留输入/输出管道以及进程 ID。
编辑:
所以,我的问题如下。我有一个进程 A,它启动了一个脚本,这个脚本以执行进程 B 结束。我需要让 A 获取 B 的所有输出,并且能够通过终止它生成的进程(脚本)来终止 B。
在 Unix 上,执行 B 就exec
可以完成这项工作。
答案1
据我所知没有。Windows 缺少execv()
bash exec 执行的功能。call
适用于调用批处理文件(简单,只需在当前解释器中解释文件,类似于 bash 的.
命令),但不适用于 exe。
这使得在 Windows 上用任何语言编写单行包装脚本变得不可能。您总是会在 Ctrl+C 上看到“终止批处理作业?”这样的废话,并且终止批处理进程(不是使用 Ctrl+C,而是从任务管理器中)不会终止子进程。我现在正在寻找一个 C 模板文件来进行这种包装。
更新:Windows 确实_execv()
在 MSVCRT 中有一个 POSIX 兼容层,但据我所知(还没有测试过)它只是一个包装器,CreateProcess
所以它会一直创建一个新进程,它不能替换当前进程。
答案2
我认为称呼按你想做的做,但我不是 100% 确定。
答案3
您可以构造一个动态批处理命令并根据先前操作的输出执行它。我不确定这是否是您的解决方案,但以下代码可以正常工作。
SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%
答案4
- 执行批处理文件:
call
- 执行exe文件:无需命令,直接调用
/path/to/exe/something.exe