y83 code / справочник

Процессы

Раздел «Процессы» — это контрольная панель над всем, что сейчас работает на телефоне. Здесь видно, какие программы и сервисы живут, сколько они едят процессора и памяти, что упало, а что должно работать, но не работает. Отсюда же можно перезапустить сервис, выключить автозапуск или снять зависший процесс.

раздел
Подсистемы приложения
пунктов возможностей
42
источник
docs/about/processes.md

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

Возможности

  • Два режима одним экраном. Чипы сверху переключают список: processes с числом всех процессов или services с числом сервисов. Число не меняется от поиска и фильтров. Выбор запоминается и восстанавливается при следующем открытии.
  • Поиск по процессам по командной строке, номеру процесса, номеру родителя и имени пользователя. Совпадение подсвечивается прямо в названии.
  • Поиск по сервисам по имени. Совпадение в названии сервиса не подсвечивается — это сделано только у процессов.
  • Сортировка процессов шестью способами: по процессору, по памяти, по реально занятой памяти, по номеру, по имени и по времени старта.
  • Фильтр процессов тремя режимами: все, только управляемые сервисы и только тяжёлые (процессор или память от 1%).
  • Раздел // hot вверху списка — до трёх процессов с нагрузкой от 1%. Появляется, только когда нет поиска и фильтр стоит на «все».
  • Цветная полоса процессора на каждой карточке: бирюза — спокойно, янтарь — заметно, красный — горячо. Процесс от 25% помечается треугольником.
  • Полоса памяти вторая: сравнивает процесс с самым прожорливым в списке. От 20% памяти полоса становится красной.
  • Карточка процесса показывает имя, текущий процент процессора, занятую память в килобайтах, мегабайтах или гигабайтах, состояние процесса, его номер, процент памяти и сколько он уже живёт.
  • Детали процесса по тапу: полная командная строка, родитель, пользователь, состояние, момент старта, средняя нагрузка, накопленное время процессора, полный и занятый объём памяти.
  • Остановка процесса двумя способами: мягко (SIGTERM — «дай завершиться») и жёстко (SIGKILL — убить сразу). Перед отправкой всегда показывается подтверждение с объяснением разницы.
  • Копирование номера процесса, полной команды и порта сервиса в буфер обмена — одной кнопкой.
  • Долгий тап по процессу открывает короткое меню: детали, копирование, мягкая остановка, жёсткая остановка.
  • Карточка сервиса показывает статус, номер процесса, время работы, порт и открыт ли он, число перезапусков и переключатель автозапуска.
  • Управление сервисом прямо на карточке: restart, stop или start — в зависимости от текущего состояния. Плюс кнопка открыть логи.
  • Меню сервиса по тапу: перезапуск, остановка или запуск, автозапуск вкл/выкл, логи и копирование порта.
  • Логи сервиса в отдельном окне: последние строки, кнопки Reload и Copy.
  • Группировка сервисов на // running и // stopped, обе группы по алфавиту.
  • Фильтр сервисов по состоянию (all / running / stopped) — появляется, когда сервисов больше пяти.
  • Блок предупреждений // alerts над списком: потеряли связь с серверной частью, сервис упал или должен работать, сервис перезапускался слишком часто, зависшие процессы-зомби. По тапу на строку экран переходит к источнику.
  • Ручное обновление кнопкой в шапке, протяжкой пальцем вниз и кнопкой в нижней панели.
  • Автообновление с выбором интервала: 1 секунда, 3 секунды, 10 секунд или выключить совсем. Выбор запоминается.

Технические данные

ПараметрЗначение
Интервалы обновления1 с, 3 с, 10 с или off (по умолчанию 3 с)
Вариантов сортировки6
Фильтров процессов3: all, managed, heavy
Фильтров сервисов3: all, running, stopped
Порог «тяжёлого» процессапроцессор или память от 1%
Порог «горячего» маркераот 25% процессора
Сколько процессов в // hotдо 3
Порядок групп сервисовсначала работающие, потом остановленные
Строк сервисного лога в окне200
Высота окна логовдо 420 единиц, дальше прокрутка
Проверка «жив ли сервис»каждые 15 секунд
Проверка открытости порта200 миллисекунд на попытку
Источник списка сервисоводин файл с описанием сервисов
Что видно в шапкесчётчики, память, время обновления, число тревог
На этом устройстве сейчас8 ядер, 11.0 ГБ памяти, 33 процесса, 6 сервисов
Из них работает сейчас1 сервис (codex), остальные остановлены
Из них должны работать2 сервиса помечены как «должен работать, но стоит»

Два списка на одном экране

Списка два, и они отвечают на разные вопросы.

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

Сервисы — это только те программы, которые вы сами внесли в список сервисов как управляемые: с именем, командой запуска, портом и правилом автозапуска. Список короткий и стабильный. Смотреть его нужно, когда «что-то не работает»: кодекс не отвечает, opencode не поднялся, локальная модель молчит.

Сам бэкенд приложения, который собирает данные для этого экрана, в список сервисов не попадает — там только то, что вы настроили сами.

Как читать карточку процесса

Сверху имя программы, справа — её процессор и занятая память. Цвет числа процессора сразу говорит о нагреве: бирюза — меньше 5%, янтарь — от 5%, красный — от 25%.

Под именем идёт строка мелочи: состояние процесса (например R — работает, S — спит; к букве могут добавляться служебные флаги), его номер, сколько процентов памяти он занимает и сколько времени живёт.

Ниже две полосы: cpu — нагрузка на процессор в пределах ста процентов, mem — доля памяти по сравнению с самым тяжёлым процессом в списке.

Значение процессора бывает двух видов. Пока данные собраны в первый раз, показывается средняя нагрузка за всё время жизни процесса с пометкой avg. Со второго запроса к серверной части появляется живое мгновенное значение — оно настоящее и может прыгать. Поэтому первые минуты после запуска сервера карточки показывают средние цифры, а не текущие.

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

Как читать карточку сервиса

Цветная точка и подпись справа — это состояние:

  • running — сервис работает.
  • starting — запускается, ждите.
  • stopping — останавливается.
  • error — при запуске была ошибка, её текст показан ниже красным.
  • stopped — не работает.

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

Справа чип auto:on или auto:off — автозапуск. Переключается тапом и сразу сохраняется, так что сервис будет стартовать вместе с системой или нет.

Под именем жёлтой строкой может появиться предупреждение вида desired running · actual stopped — это значит, что сервис задуман рабочим, но сейчас не работает. Это не поломка приложения, а напоминание.

Внизу карточки кнопки: у работающего restart и stop, у остановленного start, плюс logs на логи.

Строка мелочи у зависшего процесса становится красной — так зомби и узнаётся ещё до того, как появится предупреждение.

Про предупреждения

Блок // alerts собирает пять видов проблем:

  • Серверная часть недоступна. Пока связи нет, обновление не работает, и если списки ещё пусты, вместо них экран покажет ошибку с кнопкой повтора.
  • Сервис упал с ошибкой — показывается текст ошибки.
  • Сервис должен работать, но не работает — то самое расхождение с планом.
  • Сервис перезапускался три и больше раз — частые падения.
  • Зависшие процессы-зомби — процессы, которые должны были умереть, но не умерли.

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

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

Про «порт открыт»

Подпись вида :8789 open означает, что на этом порту кто-то слушает. Это не доказательство, что сервис работает: порт мог занять кто-то другой. Обратная ситуация тоже бывает — сервис живёт, а порт не назначен, и тогда подписи не будет вовсе.

Ориентируйтесь на статус и время работы, а не только на порт.

Почему нет привычной нагрузки на процессор

В большинстве систем есть строка вроде «нагрузка 2.4» — она считается по среднему числу задач в очереди. Телефон эту величину наружу не отдаёт, поэтому вместо неё в шапке показываются честные числа: сколько ядер у устройства и сколько памяти занято из общей, например 7.3/11.0G.

Что агент умеет

Агент может открыть этот экран через мост командой открытия экрана processes. Прочитать содержимое экрана он тоже может, но только если приложение сейчас на экране: ушедшее в фон приложение текст не отдаёт.

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

Управлять сервисами агент тоже может: у него есть мостовые команды списка, запуска, остановки, перезапуска и логов сервисов. Останавливать или убивать процессы агент может, но такая просьба опасна — можно снять сам бэкенд, и связь оборвётся прямо во время работы.

Ограничения

  • Автообновление идёт, только пока экран открыт и приложение на экране. Ушли в фон или на другой экран — опрос встал, данные заморозились.
  • Интервал в секунду даёт заметную нагрузку: для обычного наблюдения хватает трёх секунд.
  • Пока интервал выключен, список обновляется только кнопкой.
  • Список сервисов читается при запуске серверной части. Если вы правили файл с сервисами руками, нужен перезапуск серверной части, иначе изменения не подхватятся.
  • Переключатель автозапуска, наоборот, сохраняется сразу, перезапуск не нужен.
  • Вложенные кавычки в команде сервиса ломают запуск. Правильный путь — вынести длинную команду в отдельный скрипт и указать на него.
  • Сервис, который не слушает сетевой порт, в этом списке нормально работать не будет: проверка здоровья идёт по обычному интернету, а без адреса проверять нечего. Таким сервисам нужен свой сетевой адрес.
  • Убийство процесса вслепую опасно. Подтверждение есть, но предупреждения «это сам бэкенд, связь сейчас оборвётся» экран не показывает. Обрыв связи случится в тот же момент.
  • Число процессов на разных устройствах разное, это нормально.
  • Все надписи на экране английские.

Источник: docs/about/processes.md. Страница собрана из документации проекта при сборке сайта — без пересказа.