Проектная лаборатория
Собственный Shell
Этап 54 · Фоновые задания
Повторное использование номеров заданий
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете повторное использование номеров заданий.
Повторное использование номеров заданий
Обычно номера заданий назначаются последовательно: 1, 2, 3 и так далее. Однако после завершения задания удаляются из таблицы, что позволяет использовать их номера повторно.
При назначении нового номера задания:
- Если таблица заданий пуста, назначьте
[1]. - Иначе назначьте номер на единицу больше наибольшего номера в текущей таблице.
Несколько примеров:
# Recycling to 1 when the table is empty
$ sleep 1 &
[1] 84470
$ sleep 2 &
[2] 84471
# (after both jobs finish)
[1]- Done sleep 1
[2]+ Done sleep 2
$
# Table is empty — next job starts at [1]
$ sleep 10 &
[1] 84490
# Reusing number 2 when job 2 exits but job 1 remains
$ sleep 100 &
[1] 84470
$ sleep 1 &
[2] 84471
# (after job 2 finishes)
$ echo "Hello"
Hello
[2]+ Done sleep 1
$
# Job 1 still running — next job gets [2]
$ sleep 10 &
[2] 84490Проверки
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.shЗатем система запустит задание, дождётся его завершения и запустит другое, чтобы проверить возврат к номеру 1:
$ cat /path/to/fifo &
[1] <pid>
$ echo apple
apple
[1]+ Done cat /path/to/fifo
$
$ sleep 100 &
[1] <pid>
$ jobs
[1]+ Running sleep 100 &Тестирующая система также перезапустит вашу программу и проверит повторное использование номеров после завершения задания:
$ sleep 100 &
[1] <pid>
$ cat /path/to/fifo &
[2] <pid>
$ echo word
word
[2]+ Done cat /path/to/fifo
$
$ sleep 50 &
[2] <pid>
$ jobs
[1]- Running sleep 100 &
[2]+ Running sleep 50 &Тестирующая система проверит, что:
- После завершения всех заданий следующее получает
[1]. - Если задание 2 завершилось, а задание 1 осталось, следующее получает
[2]. - Номера заданий не растут бесконечно.
Примечания
- Номера заданий используются повторно — они не растут бесконечно. После завершения задания 2 следующее задание получает
[2], а не[3]. - Когда таблица заданий пуста, начинайте снова с
[1].
Проверка в вашей 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 fy4Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.