Проектная лаборатория
Собственный Shell
Этап 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 go2. Откройте папку в IDE
cd ./my-shellРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage si2Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.