在Windows中有没有相当于Unix Shell的“exec”? 基本上,我需要避免分叉一个新的进程,所以input/输出pipe道保存,以及进程ID。
编辑:
所以,这是我的问题。 我有一个启动一个脚本的进程A,这个脚本通过执行一个进程B结束。我需要A来获得B的所有输出,并且能够通过杀死它产生的进程来杀死B(脚本) 。
在Unix上,用exec执行B就可以完成这项工作。
AFAIK没有。 Windows缺lessexecv() ,这是bash exec如何执行的。 call工程调用batch file(很容易,只是解释当前解释器中的文件,类似于bash的.命令),但不适用于exes。
这使得在Windows上以任何语言编写用于脚本的一行封装脚本都是不可能的。 你总是会得到这个“终止批量作业?” 在Ctrl + C上废话并杀死批处理(而不是Ctrl + C,从任务pipe理器说)不会杀死subprocess。 我现在正在寻找一个C模板文件来做这个包装。
更新:Windows在MSVCRT的POSIX兼容层中有_execv() ,但是AFAIK(没有testing过)它只是CreateProcess的一个包装,所以它总是会创build一个新的进程,它不能代替当前的进程。
我想电话是做你想做的,但我不是100%肯定的。
您可以构build一个dynamic批处理命令,并根据之前操作的输出执行它。 我不知道这将是一个解决scheme在你的情况下,但下面的代码工作得很好。
SET yourDynamicCommand=SET var=1 %yourDynamicCommand% ECHO var's value is %var%