Driver86
@Driver86
Изобретатель

Почему зависает консоль ssh при завершении демона php?

Есть демон на php. В цикле действия и проверка, что получен сигнал. Если получен - выход из цикла. И завершение.

#!/usr/bin/env php
<?php
declare(strict_types=1);
declare(ticks=1);
$pid = pcntl_fork();
if ($pid) {
    echo 'Bot started.' . PHP_EOL;
    exit(0);
}
posix_setsid();
pcntl_signal(SIGTERM, function () {
    global $STOP;
    $STOP = true;
});
while (!$STOP) {
    //...
    sleep(1);
}
echo 'Bot stopped.' . PHP_EOL;
exit(0);


Проблема в том, что когда я завершаю демона командой kill pid, то он завершается, в консоль выводится "Bot stopped." и перевод строки и всё, консоль как бы зависает, будто бы ждёт ещё ответов от демона. Пока не нажму enter.

Как исправить? Чего ждёт консоль?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
roswell
@roswell
и швец, и жнец, и на дуде игрец
Консоль просто не понимает, чего от неё хотят -- процессы-демоны и не должны выводить ничего в stdout и даже в stderr, для них обычно это плохо кончается. Сооруди описание сервиса для systemctl и рули процессом оттуда.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
вы уверены что консоль зависает?
вы форкнули процесс, завершили первый, bash вывел приглашение ввода команд, после этого через секунду завершился второй процесс, и вывел сообщение - у вас теперь приглашение на предыдущей строке а курсор на новой чистой, и вы ждете чего то, хотя на самом деле bash у вас уже ждет ввода команды, вы ее можете вводить.

когда нажимаете enter, bash просто выводит повторно приглашение ко вводу команд
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Skyeng Москва
До 180 000 руб.
от 120 000 руб.
Actionpay Москва
от 140 000 до 140 000 руб.
15 авг. 2018, в 07:40
120000 руб./в месяц
15 авг. 2018, в 07:34
98000 руб./в месяц
15 авг. 2018, в 07:30
100000 руб./в месяц