Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Запуск exe-шника (Exec + Windows - хостинг)
EvPut  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 3592
На форуме: 9 лет, 1 месяц, 23 дня
Карма:




Существует задача, которая требует запуска ехе-шника, для выполнения задачи, которую невозможно решить средствами php.
Я вызываю его из 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
// 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);
}
?>

для контроля с помощю утилиты http://www.sysinternals.com/ntw2k/freeware/pstools.shtml


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса