Помимо многих других деталей, это происходит, когда cmd
вызывается через CreateProcess()
с DETACHED_PROCESS
, что и делает Apache в ap_cgi_build_command()
- apr_proc_create()
(ссылка на исходный код Apache 2.2.25).
По какой-то причине дочерние процессы из cmd
также порождаются отсоединенными. Это также происходит в других ситуациях (например, вызывая WScript.CreateObject("WScript.Shell").Run()
в том же контексте), которые могут включать или не включать cmd
в фоновом режиме.
Несоответствующий извлеченный урок: если CreateObject(DETACHED_PROCESS)
и перенаправление ввода / вывода (STARTF_USESTDHANDLES
) смешаны вместе, результаты могут быть неожиданными.
Насколько я знаю, нет другого решения, кроме как избежать партии, WSH и других. Команда httpd
может обойти это в будущем.