Проектная лаборатория
Собственный Shell
Этап 47 · Фоновые задания
Запуск фоновых заданий
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете запуск команд в фоне.
Фоновые задания: напоминание
Команды можно запускать в фоне, добавляя & в конце. Оболочка запускает программу, но не ждёт её завершения, позволяя продолжать ввод других команд.
При запуске фонового задания оболочка выводит строку с его номером и идентификатором процесса:
$ sleep 30 &
[1] 84470
$ Номер задания [1] назначается последовательно, начиная с 1. Каждое новое фоновое задание получает следующий номер. PID (84470 в этом примере) — фактический идентификатор процесса, назначенный операционной системой; он будет различаться.
Запуск команд с токеном &
После разбора командной строки на токены проверьте, является ли последний токен &. Если да:
- Удалите его из списка аргументов.
- Запустите оставшуюся команду в фоне.
- Выведите номер задания и PID.
- Немедленно покажите следующее приглашение.
Например, sleep 30 & содержит три токена: sleep, 30 и &. Удалите & и запустите sleep 30 в фоне.
Точный механизм запуска команды в фоне зависит от языка. Например:
- В C: вызовите
fork()иexec(), но не вызывайтеwaitpid(). - В Python: используйте
subprocess.Popen()без вызова.wait()или.communicate(). - В Node.js: используйте
child_process.spawn(), не дожидаясь завершения процесса.
Проверки
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.shЗатем система запустит команду sleep в фоне:
$ sleep 500 &
[1] 84470
$ Тестирующая система проверит, что:
- Вывод содержит
[JOB_NUMBER] PIDна одной строке. - Следующее приглашение появляется немедленно (оболочка не ждёт завершения команды).
- Фоновый процесс действительно запускается.
Примечания
- На этом этапе запускается только одно фоновое задание, поэтому его номер всегда будет
[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 at7Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.