CLI · Winter Console

Команда process

Процессы можно запускать не только из кода. Команда process находит все классы-процессы проекта, показывает, кто из них сейчас работает, и позволяет запустить, остановить и осмотреть любой — не трогая приложение.

Алиас call procДействия list · start · stop · statusДемоны отдельной командой

Зачем

Процесс — единица работы вне запроса: импорт, рассылка, пересчёт. Ему нужны операционные действия, которых нет в коде приложения: посмотреть, идёт ли он сейчас, запустить руками после сбоя, остановить перед выкладкой, разобраться, почему он ест процессор.

Команда process даёт ровно это. Что такое процессы и как их писать — на странице Процессы.

Что есть в проекте

bash
php call process list
php call proc list          # то же самое
text
[ Available Processes ]
[P] main.process.ImportProcess       ● running   [BUSY]
[P] main.process.ReportProcess       ○ stopped
[P] main.process.CleanupProcess      ● running   [idle]
- - - - - - - - - -
[i] 3 defined, 2 running.

Список собирается сканированием проекта, поэтому регистрировать процессы нигде не нужно — достаточно, чтобы класс наследовал Process. Демоны в этот список не попадают: у них своя команда.

Обозначение Значение
/ Работает / остановлен
[BUSY] Сейчас выполняет полезную работу
[idle] Запущен, но простаивает

Имя класса

Класс указывается точечной записью — тем же способом, что в make и script:

bash
php call proc main.process.ImportProcess status

Точки заменяются на разделители пространств имён, каждый сегмент пишется с заглавной: main.process.ImportProcessMain\Process\ImportProcess. Регистр во вводе значения не имеет, так что main.process.importprocess тоже сработает.

Запуск

bash
php call proc main.process.Import              # foreground
php call proc main.process.Import start        # то же самое
php call proc main.process.Import start -d     # в фоне

На переднем плане — процесс занимает терминал, пишет в него и завершается сам. Так его удобно отлаживать: видно вывод, Ctrl+C останавливает.

В фоне (-d) — команда открепляет процесс и возвращает управление, напечатав PID. Терминал можно закрыть.

text
[✓] Dispatched (background): MainProcessImport
  PID          48213

Повторный запуск не создаёт второй процесс

Если процесс уже работает, команда об этом скажет и ничего не запустит:

[!] Already running [PID:48213] (2026-08-14 09:12:44).

Это тот же механизм блокировки, что защищает процесс от параллельного запуска изнутри приложения, — файл блокировки в storage/runnable.

Остановка

bash
php call proc main.process.Import stop

Отправляется SIGTERM — сигнал корректного завершения. Процесс получает возможность доработать текущую итерацию, закрыть соединения и выйти сам. Немедленно он не умирает, и это правильно: незавершённая запись в базу хуже задержки на секунду.

Состояние

bash
php call proc main.process.Import status
text
[ Process Status ]
main.process.Import        Process ● RUNNING
PID          48213
State        RUNNING
Activity     BUSY
Started      2026-08-14 09:12:44
Uptime       2h 14m
Concurrency  4

С флагом -v добавляется потребление ресурсов, снятое у операционной системы:

bash
php call proc main.process.Import status -v
text
[ Resources ]
User         winter
PPID         1
CPU          12.4 %
Memory       3.1 % (248.6 MB)
Elapsed      02:14:31

Это первое, куда стоит смотреть, когда процесс «висит»: Activity покажет, работает он или простаивает, а CPU и Memory — во что упёрся.

Все действия

Команда Что делает
list Все процессы проекта с текущим состоянием
<Класс> Запуск на переднем плане
<Класс> start То же явно
<Класс> start -d Запуск в фоне
<Класс> stop Корректная остановка (SIGTERM)
<Класс> status Состояние, PID, время работы
<Класс> status -v Дополнительно потребление ресурсов

Дальше

  • Процессы — как писать процессы
  • daemon — то же для демонов и их воркеров
  • schedule — задачи по расписанию
  • run — запуск процессов вместе с приложением