Проектная лаборатория

Собственный Shell

0 / 76этапов пройдено

Этап 48 · Фоновые задания

Вывод фоновых заданий

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы обеспечите возможность вывода фоновых заданий в терминал.

Вывод фоновых заданий

Когда команда выполняется в фоне, потоки stdout и stderr фонового процесса остаются подключёнными к терминалу оболочки. Поэтому любой создаваемый им вывод должен по-прежнему появляться в оболочке.

Например:

$ sleep 2 && echo "Done sleeping" &
[1] 84470
$ echo "I can type this immediately"
I can type this immediately
$ Done sleeping

Здесь вывод задания (Done sleeping) появляется в терминале, хотя оно выполнялось в фоне.

На этом этапе нужно обеспечить использование фоновым процессом тех же stdout и stderr, что и оболочкой. При создании фонового процесса разрешите ему наследовать стандартные потоки оболочки.

В большинстве API дочерних процессов это поведение по умолчанию (например, stdio: "inherit" в Node.js).

Проверки

Тестирующая система запустит вашу программу следующим образом:

$ ./your_program.sh

Система запустит команду cat в фоне, а затем другую на переднем плане; они будут читать данные из FIFO:

$ cat /path/to/fifo1 &
[1] 84470
$ cat /path/to/fifo2

Затем тестирующая система запишет данные в FIFO:

$ echo -ne "Hello from FIFO#1\n" > /path/to/fifo1
Hello from FIFO#1
$ echo -ne "Hello from FIFO#2\n" > /path/to/fifo2
Hello from FIFO#2

Тестирующая система проверит, что:

  • Вывод фонового задания появляется в терминале.
  • Вывод задания переднего плана появляется в терминале.
  • Оба процесса используют те же stdout/stderr, что и оболочка.

Примечания

  • Тестирующая система использует FIFO (именованные каналы), чтобы управлять моментом появления вывода. FIFO — специальный файл, чтение из которого блокируется, пока кто-нибудь не запишет в него данные.
  • Убедитесь, что дочерние процессы наследуют стандартные потоки оболочки.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init shell ./my-shell --language go

2. Откройте папку в IDE

cd ./my-shell

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage si2

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста