Eu tenho um programa que lança outras instâncias de si mesmo. Cada instância redireciona o fluxo de saída padrão para um arquivo diferente. Estou tendo um problema com a seguinte cadeia de eventos:
- Um arquivo BAT é executado que contém o comando
my_program.exe > output_launcher.txt - my_program.exe inicia mais instâncias usando os comandos
my_program.exe > output_1.txtemy_program.exe > output_2.txt - A instância original (
my_program.exe > output_launcher.txt) sai enquanto as duas instâncias iniciadas (my_program.exe > output_1.txtemy_program.exe > output_2.txt) continuam em execução. - O mesmo arquivo BAT do # 1 é executado novamente.
- A nova instância de
my_program.exe > output_launcher.txtfalha com o erro "O processo não pode acessar o arquivo porque está sendo usado por outro processo".
Não recebo o erro se o arquivo BAT do nº 1 não redirecionar a saída e não recebo o erro se as duas instâncias iniciadas forem encerradas antes de executar o arquivo BAT pela segunda vez.
Portanto, suponho que o CMD.EXE mantenha direitos exclusivos para o arquivo output_launcher.txt até que todos os subprocessos sejam concluídos.
Primeiro de tudo, isso é uma boa suposição?
O que eu gostaria que acontecesse é que o CMD.EXE renuncie a seus direitos a output_launcher.txt quando a instância original existir no nº 3, pois cada subprocesso está redirecionando para seu próprio arquivo.
Isso é possível ao redirecionar a saída padrão? A melhor alternativa em que posso pensar seria realmente aceitar o local do arquivo de log como um argumento da linha de comando e gravar no arquivo diretamente do meu programa, em vez de redirecionar a saída padrão. Isso envolveria muito mais trabalho para mim, portanto, eu gostaria de evitar esse caminho, se possível.
Obrigado!
EDIT: Parece a linha de comando real que a primeira instância usa para iniciar as instâncias adicionais start cmd /C "call my_program.exe > output_1.txt". Depois passo esse comando para a função "system ()" (my_program.exe está escrito no MSDN C).
Talvez eu possa iniciar as instâncias adicionais de uma maneira diferente que possa ajudar?