Один момент, который не был сделан в существующих ответах, заключается в том, что разрешение дочернему процессу наследовать дескрипторы влияет не только на дочерний процесс; это также может повлиять на время жизни объекта, к которому относятся дескрипторы. Если родительский процесс завершается, дескрипторы дочернего процесса сохранят объект живым.
Когда вы разрешаете дочернему процессу наследовать дескрипторы, вы должны учитывать, приведет ли он к тому, что объект будет жить дольше, чем должен; например, некоторые приложения хотят разрешить запуск только одного экземпляра за раз, и могут сделать это, создав объект события с заданным именем и проверив, существует ли он уже. Если они создают дочерний процесс, который наследует этот объект события и переживает родительский процесс, это может привести к ложному срабатыванию.
Чаще всего унаследованный дескриптор файла может привести к тому, что файл останется в использовании (и, следовательно, недоступен) дольше, чем следовало бы.
По этой причине передовой практикой является:
С другой стороны, это иногда может быть полезно; например, если вы хотите, чтобы дочерний процесс считался экземпляром родительского процесса, или чтобы файл оставался недоступным до выхода из дочернего процесса. Другая хитрость заключается в том, чтобы дочерний элемент наследовал дескриптор именованного объекта, а затем использовал существование или отсутствие объекта, чтобы определить, жив ли дочерний элемент, без необходимости передавать дескриптор процесса или идентификатор процесса.