Цель такая - один скрипт может запускать/убивать другие скрипты-демоны. Для этого я использую shell_exec()
, сохраняю PID и потом управляю процессами через функцию shell_exec()
. Это в принципе нормально?
Возник вопрос относительно использования этой функции. Вот фрагмент кода скрипта, который должен запускать демона:
echo exec('php -f testd.php &');
После этой строки скрипт ничего не выводит, а приостанавливает свое выполнение, будто чего-то ожидая. В это время демон testd.php
работает. После принудительной остановки скрипта, демон тоже прекращает свою работу. При этом если выполнить такую же команду php -f testd.php &
в терминале, то всё работает так, как и задумано - демон запускается отдельным процессом и в терминал выводится его PID. Но весь вывод демона попадает в тот же терминал, из которого он был запущен, так ведь не должно быть... Что я делаю не так?
В документации к exec написано:
Для получения вывода исполняемой программы, убедитесь, что параметр output инициализирован и используется.
Я подозреваю, что нужно сделать как-то так:
$output = array();
exec($command , $output);
print_r($output);
После этой строки скрипт ничего не выводит, а приостанавливает свое выполнение, будто чего-то ожидая.
Он ожидает конца выполнения вашего демона. Добавьте к вашей команде вывод в /dev/null
вот так php -f testd.php > /dev/null 2>&1 & echo $!
. Тогда скрипт не будет ждать завершения демона и получит pid.
<?php
$response = array()
exec('whoami', $response);
print_r($response,true);
?>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
После установки на локальный сервер Openserver не грузятся изображения и яваскриптыНапример http://magento2
Салют народ, крч у меня не хочет подключаться