Цель такая - один скрипт может запускать/убивать другие скрипты-демоны. Для этого я использую 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);
?>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей