Вот запустили вы на обновление огромный каталог в шелле. Как понять, идет ли процесс? Да, можно заморочиться с индикатором. А можно писать в лог, но не обычным способом.
Мне кажется, если запуск идет в шелле то вариантов реализации тут несметное множество. И два счетчика, как по мне, не самое гибкое решение ибо все равно дает маловато обратной связи и в случае проблем опять придется подключаться с GDB и смотреть чего там происходит сейчас. Не пробовал сделать с сигналами (если установлен pcntl, конечно)? Вот как dd, к примеру.
#!/usr/bin/php
<?php
class Worker
{
private $counter = 1000;
public function start() {
# Вместо тиков, можно просто дергать pcntl_signal_dispatch на каждой итерации
# Количество тиков нужно тюнить
# declare можно так же вынести на верхний уровень и не делать ему отдельный скоуп
declare(ticks=2) {
while ($this->counter--) {
$this->doSmth();
sleep(1);
}
}
}
public function printStats() {
printf("Left:%d\n", $this->counter);
}
protected function doSmth() {
}
}
$worker = new Worker;
pcntl_signal(SIGUSR1, function() use ($worker) {
$worker->printStats();
});
printf("Try:\nkill -USR1 %d\n", getmypid());
print("\nStarted\n");
$worker->start();
Послав запущенному процессу сигнал USR1 он выведет в stdout инфу о текущем состоянии:
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».