Driver86
@Driver86
Немодератор toster.ru

Почему зависает консоль 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.

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

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

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

Войти через центр авторизации
Похожие вопросы
FunBox Санкт-Петербург
от 120 000 ₽
FunBox Москва
от 120 000 ₽
FunBox Томск
от 120 000 ₽
18 февр. 2020, в 23:53
8000 руб./за проект
18 февр. 2020, в 22:14
10000 руб./за проект