¿Hay algún equivalente en Windows para el "ejecutivo" de Unix Shell? Básicamente, necesito evitar bifurcar un nuevo proceso, de modo que se conserven las tuberías de entrada / salida, así como la identificación del proceso.
Editar:
Entonces, aquí está mi problema. Tengo un proceso A que inicia un script, y este script finaliza ejecutando un proceso B. Necesito que A obtenga toda la salida de B, así como poder matar a B al matar el proceso que ha generado (el script) .
En Unix, ejecutar B con exec
hace ese trabajo.
windows
shell
windows-command-prompt
Daniel C. Sobral
fuente
fuente
Respuestas:
AFAIK no hay. Windows carece de
execv()
cómo bash exec lo hace.call
funciona para llamar archivos por lotes (fácil, solo interprete el archivo en el intérprete actual, similar al.
comando de bash ) pero no para exes.Esto hace que sea imposible escribir scripts de envoltura de una línea para scripts en cualquier idioma en Windows. Siempre obtendrá ese "¿Terminar trabajo por lotes?" basura en Ctrl + C y matar el proceso por lotes (no con Ctrl + C, desde el administrador de tareas, por ejemplo) no matará el proceso hijo. Ahora estoy buscando un archivo de plantilla C para hacer este ajuste.
ACTUALIZACIÓN: Windows tiene
_execv()
en su capa de compatibilidad POSIX en MSVCRT, pero AFAIK (no lo ha probado) es solo una envoltura, porCreateProcess
lo que siempre creará un nuevo proceso, no puede reemplazar el proceso actual.fuente
Creo que la llamada hace lo que quieres, pero no estoy 100% seguro.
fuente
Puede construir un comando por lotes dinámico y ejecutarlo en función de la salida de operaciones anteriores. No estoy seguro de que esta sea una solución en su caso, pero el siguiente código funciona bien.
fuente
exec
...call
/path/to/exe/something.exe
fuente