У меня есть программа, которая запускает другие экземпляры себя. Каждый экземпляр перенаправляет стандартный поток вывода в другой файл. У меня проблема со следующей цепочкой событий:
- Выполняется BAT-файл, содержащий команду
my_program.exe > output_launcher.txt
- my_program.exe запускает больше своих экземпляров, используя команды
my_program.exe > output_1.txt
иmy_program.exe > output_2.txt
- Исходный экземпляр (
my_program.exe > output_launcher.txt
) завершается, пока два запущенных экземпляра (my_program.exe > output_1.txt
иmy_program.exe > output_2.txt
) продолжают выполняться. - Тот же BAT-файл из # 1 выполняется снова.
- Новый экземпляр
my_program.exe > output_launcher.txt
завершается с ошибкой «Процесс не может получить доступ к файлу, поскольку он используется другим процессом».
Я не получаю сообщение об ошибке, если файл BAT из # 1 не перенаправляет вывод, и я не получаю сообщение об ошибке, если два запущенных экземпляра завершают работу до повторного выполнения файла BAT.
Итак, я предполагаю, что CMD.EXE обладает исключительными правами на файл output_launcher.txt, пока все подпроцессы не будут завершены.
Прежде всего, это хорошее предположение?
Я хотел бы, чтобы CMD.EXE отказался от своих прав на файл output_launcher.txt, когда исходный экземпляр существует в # 3, поскольку каждый подпроцесс перенаправляется в свой собственный файл.
Возможно ли это при перенаправлении стандартного вывода? Лучшая альтернатива, которую я могу придумать, - это взять местоположение файла журнала в качестве аргумента командной строки и записать файл непосредственно из моей программы, а не перенаправлять стандартный вывод. Это потребует от меня гораздо больше работы, поэтому я бы хотел избежать этого пути, если это возможно.
Спасибо!
РЕДАКТИРОВАТЬ: фактическая командная строка, которую первый экземпляр использует для запуска дополнительных экземпляров, выглядит как start cmd /C "call my_program.exe > output_1.txt"
. Затем я передаю эту команду в функцию "system()" (my_program.exe написан на MSDN C).
Может быть, я мог бы запустить дополнительные экземпляры другим способом, который мог бы помочь?