Я вызываю его из php-скрипта: @exec('program.exe [парамеры]');
Он должен выполнить свою работу и завершиться. По крайней мере локально на машине он работает именно так - я проверил (т.к. его разрабатывал не я). Свою работу он выполнял.
Через пару дней я получаю от хостера письмо:
Ваш сайт вызывает серьезную перегрузку сервера. Для продолжения предсказуемой работы остальных сайтов хостинга, находящихся на одном сервере с вашим сайтом, ваш сайт или отдельные его части остановлены.
Причина:
60 одновременно запущенных экземпляров .../program.exe
с параметрами типа ...
Вызов скрипта осуществлял только я (отлаживал), другим адрес неизвестен. Получается, что после вызова и выполняния работы он оставался в памяти... Так? Как это можно отследить или необходимо еще и завершение работы запущенного приложения, если да, то как это делается?
Буду благодарен за любую помощь.
Спустя 11 часов, 57 минут, 34 секунды (3.12.2007 - 12:40) John_Wehin написал(а):
попробуйте посмотреть в сторону popen()
Спустя 37 минут, 20 секунд (3.12.2007 - 13:17) John_Wehin написал(а):
Можно еще так:
---Выдрано из php.net ----
---Выдрано из php.net ----
Код |
<?php // pstools.inc.php function PsExecute($command, $timeout = 60, $sleep = 2) { // First, execute the process, get the process ID $pid = PsExec($command); if( $pid === false ) return false; $cur = 0; // Second, loop for $timeout seconds checking if process is running while( $cur < $timeout ) { sleep($sleep); $cur += $sleep; // If process is no longer running, return true; if( !PsExists($pid) ) return true; // Process must have exited, success! } // If process is still running after timeout, kill the process and return false PsKill($pid); return false; } function PsExec($command) { exec( dirname(__FILE__). "\\psexec.exe -s -d $command 2>&1", $output); while( list(,$row) = each($output) ) { $found = stripos($row, 'with process ID '); if( $found ) return substr($row, $found, strlen($row)-$found-strlen('with process ID ')-1); // chop off last character '.' from line } return false; } function PsExists($pid) { exec( dirname(__FILE__). "\\pslist.exe $pid 2>&1", $output); while( list(,$row) = each($output) ) { $found = stristr($row, "process $pid was not found"); if( $found !== false ) return false; } return true; } function PsKill($pid) { exec( dirname(__FILE__). "\\pskill.exe $pid", $output); } ?> |
_____________