Linux Labs

Пользователи, права, процессы / Ступень 11 из 13

Фоновые задания и терминал

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 7 · на машине · 3 мин

Дождаться результата

Фоновую команду дожидаются, когда нужен её результат: оболочка вернёт приглашение, когда команда закончит.

wait ждёт фоновое задание этой оболочки, wait $! — последнюю фоновую команду. Чем она закончилась, оболочка записывает в переменную $? — это код завершения: 0 — успех, другое число — ошибка или прерывание. После Ctrl+C, например, $? хранит 130.

bash
sleep 5 &
wait $!
echo $?

Через пять секунд оболочка напечатает Done у задания, а echo $? — 0. $? хранит код последней выполненной команды, поэтому печатают его сразу.

Проверь себя 1 вопрос

В ps ты нашёл чужой процесс с PID 1500 и выполнил wait 1500. Что напечатает оболочка?

  • Код завершения wait узнаёт у своих заданий. Про чужой процесс он сообщит is not a child of this shell, а $? будет 127.

  • wait ничего не завершает, он ждёт. Про процесс, который запустила не эта оболочка, wait сообщит is not a child of this shell.

  • wait ждёт задания этой оболочки. Про чужой процесс она напечатает pid 1500 is not a child of this shell.

wait ждёт задания своей оболочки — процессы, которые она запустила. На чужой PID оболочка печатает is not a child of this shell.

Главное в шаге

  • wait $! возвращает приглашение, когда закончит последняя фоновая команда.
  • Код завершения лежит в $? до следующей команды: 0 — успех, другое число — ошибка или прерывание.
Ubuntu 24.04
Загрузка…