Запуск PHP "exec ()" в фоновом режиме в Windows? - PullRequest
2 голосов
/ 07 октября 2011

Я создал скрипт, который использует psexec для вызова другого скрипта, который вызывает psexec для запуска моей программы командной строки.

Причиной такого большого количества обращений к psexec и другим сценариям является то, что моему PHP-сценарию не нужно ждать завершения процесса, прежде чем завершить его вывод в браузер.

Есть ли способ сделать это без необходимости использовать psexec? У меня проблемы с psexec, поэтому я хотел бы просто полностью удалить его из моей программы.

Я использую Windows 2008

РЕДАКТИРОВАТЬ: я изменил название, я думаю, это будет более точный заголовок. Я обнаружил If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends. на странице php.net на exec(), но не знал, как это сделать.

Ответы [ 2 ]

5 голосов
/ 08 октября 2011

Включите перенаправление в командной строке:

exec('program.exe > NUL')

, или вы можете изменить свою программу, чтобы явно закрыть стандартный вывод, в C это будет

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE));

Это возможно (в документации не говорится) что вам может потребоваться перенаправить / закрыть как стандартный вывод, так и стандартную ошибку:

exec('program.exe > NUL 2> NUL')

или

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE));
CloseHandle(GetStdHandle(STD_ERROR_HANDLE));
2 голосов
/ 08 октября 2011

Попробуйте команду Windows start: http://technet.microsoft.com/en-us/library/cc770297%28WS.10%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...