CreateProcess, Process não terminam ao redirecionar a DST para fora/in/err
-
24-09-2019 - |
Pergunta
Estou tentando usar o CreateProcess para iniciar um script PowerShell de dentro do meu aplicativo.
Eu usei o exemplo da Microsoft (http://msdn.microsoft.com/en-us/library/ms682499(vs.85).aspx) para criar o processo filho e redirecionar os tubos padrão out/in/err.
A única questão que resta a resolver é por que o processo filho (PowerShell) não termina após a execução do comando.
Se eu executar o processo PowerShell (com o comando) cmd.exe, ele executa e sai, fechando o processo.
A única maneira de fechar o processo do PowerShell agora é executar o TerminEmProcess na alça, mas isso parece um último recurso.
Solução
Seus pais estão lendo completamente o stdout do filho? Se você não ler tudo, acredito que a criança ficará pendurada. Além disso, se o script esperar a entrada, você precisará escrever algo para o stdin da criança, ou então ele ficará. Você pode prender o Windbg à criança e ver onde está pendurado; Talvez isso lhe dê uma idéia de onde procurar.
Outras dicas
No Linux, se não redirecionar completamente a saída e o processo pai é morto, o processo infantil também é morto. Então, você verifica a documentação do Windows, que consulte a rearranjo do processo filho quando o pai for morto.