Existe algum equivalente no Windows ao "exec" do Unix Shell? Basicamente, preciso evitar a bifurcação de um novo processo, para que os tubos de entrada / saída sejam preservados, bem como a identificação do processo.
Editar:
Então, aqui está o meu problema. Eu tenho um processo A que inicia um script, e esse script termina executando um processo B. Eu preciso que A obtenha toda a saída de B, além de poder matar B matando o processo que gerou (o script) .
No Unix, a execução de B com exec
faz esse trabalho.
windows
shell
windows-command-prompt
Daniel C. Sobral
fonte
fonte
Respostas:
AFAIK não existe. Falta ao Windows,
execv()
e é assim que o bash exec faz isso.call
funciona para chamar arquivos em lote (fácil, basta interpretar o arquivo no intérprete atual, semelhante ao.
comando do bash ), mas não para exes.Isso torna impossível escrever scripts de wrapper de uma linha para scripts em qualquer idioma no Windows. Você sempre receberá a mensagem "Terminar trabalho em lotes?" porcaria em Ctrl + C e matar o processo em lote (não com Ctrl + C, do gerente de tarefas, por exemplo) não matará o processo filho. Agora estou procurando um arquivo de modelo C para fazer isso.
ATUALIZAÇÃO: O Windows tem
_execv()
em sua camada de compatibilidade POSIX no MSVCRT, mas o AFAIK (não o testou) é apenas um invólucro,CreateProcess
portanto sempre criará um novo processo, não poderá substituir o processo atual.fonte
Acho que ligar faz o que você quer, mas não tenho 100% de certeza.
fonte
Você pode construir um comando em lote dinâmico e executá-lo com base na saída das operações anteriores. Não tenho certeza se isso seria uma solução no seu caso, mas o código a seguir funciona perfeitamente.
fonte
exec
...call
/path/to/exe/something.exe
fonte