[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: exec - виснет
Страницы: 1, 2
vagrand
mouserok
Неужели все нужно думать за вас? Запускается ваш скрипт, он запускает какой-то дочерний процесс через exec(). Добавляйте в команду запуска какой-то уникальный параметр, по которому потом этот процесс можно будет легко найти. Вывод этого процесса перенаправляйте в файл.
После команды exec() делайте цикл с функцией sleep(1) на столько итераций сколько вам нужно и на каждой итерации проверяйте файл, куда процесс пишет вывод. Если на N ой итерации там нет того что вам нужно, то ищите ваш процесс при помощи команды "ps ax | grep уникальный_параметр", вытаскивайте его pid и убивайте процесс по нему.
Вот и весь архисложный алгоритм. Возможно его еще прозе сделать можно, я не искал как можно получить pid-ы порожденных процессов в php или *nix командной строке.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
mouserok
всем спасибо ... но вот это лучше
<?php
$pid=pcntl_fork();

if ($pid) {
//long time process
$a=0;
while (true) {
echo "a=$a\n\n";
ob_flush();
flush();
$a++;
shell_exec('sleep 10&');
}
}
else {
//time-limit checker
sleep(5);
posix_kill(posix_getppid(),SIGKILL);
}
?>


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.