При создании дочернего процесса в C ++ с использованием Windows API можно разрешить наследование дескрипторов от родительского к дочернему. В примере Microsoft «Создание дочернего процесса с перенаправленным вводом и выводом» , перенаправляя std in / out дочернего процесса на каналы, созданные родительским процессом, необходимо разрешить наследование для каналов перенаправления годные к употреблению.
Я работаю над небольшим демонстрационным классом, который запускает внешний исполняемый файл, читает вывод, а затем выплевывает его обратно вызывающей стороне (которая записывает возвращенный вывод в файл). Я пытаюсь встроить функцию тайм-аута, где она будет блокироваться только на определенное время, прежде чем позвонить ребенку TerminateProcess()
и продолжить жизнь.
Однако я обнаружил, что, разрешив наследование дескриптора, дочерний процесс также имеет дескриптор (видимый с Process Explorer ) для выходного файла. Я не хочу, чтобы дочерний процесс получил этот дескриптор, но родительский в этом случае (этот демонстрационный класс) также не знает о дескрипторе, поэтому в настоящее время я не могу использовать SetHandleInformation()
, чтобы специально отключить выходной файл, чтобы исключить его из наследования .
Я уверен, что должен быть лучший способ наследовать ТОЛЬКО определенные дескрипторы, которые я хочу, без разрешения "общего" наследования, которое проходит непреднамеренные и нежелательные дескрипторы. К сожалению, я не смог найти решение, просмотрев столько статей, связанных с MSDN, сколько смогу найти, и заставил себя погуглить.
По крайней мере, мне нужно сделать что-то , чтобы удалить дескрипторы из дочернего элемента, не обязательно иметь эти дескрипторы в демонстрационном классе (они используются вызывающим классом и этим демонстрационным классом). не имеет явных знаний об их существовании).
Какие-нибудь решения для более избирательного наследования? Меня особенно интересует решение, которое позволяет мне конкретно объявить, какие дескрипторы наследовать, и все неуказанные дескрипторы не будут наследоваться, если такое решение существует.
Спасибо, любезно.