Некоторые из нижеследующих команд принимают, в качестве аргумента, "идентификатор задания". См. таблицу в конце главы.
Выводит список заданий, исполняющихся в фоне. Команда ps более информативна.
![]() |
Задания и процессы легко спутать. Некоторые внутренние команды, такие как kill, disown и wait принимают в качестве параметра либо номер задания, либо номер процесса. Команды fg, bg и jobs принимают только номер задания.
"1" — это номер задания (управление заданиями осуществляет текущий командный интерпретатор), а "1384" — номер процесса (управление процессами осуществляется системой). Завершить задание/процесс ("прихлопнуть") можно либо командой kill %1, либо kill 1384. Спасибо S.C. |
Удаляет задание из таблицы активных заданий командной оболочки.
Команда fg переводит задание из фона на передний план. Команда bg перезапускает приостановленное задание в фоновом режиме. Если эти команды были вызваны без указания номера задания, то они воздействуют на текущее исполняющееся задание.
Останавливает работу сценария до тех пор пока не будут завершены все фоновые задания или пока не будет завершено задание/процесс с указанным номером задания/PID процесса. Возвращает код завершения указанного задания/процесса.
Вы можете использовать команду wait для предотвращения преждевременного завершения сценария до того, как завершит работу фоновое задание.
Пример 11-23. Ожидание завершения процесса перед тем как продолжить работу
Команда wait может принимать необязательный параметр — номер задания/процесса, например, wait %1 или wait $PPID. См. таблицу идентификации заданий.
![]() |
При запуске команды в фоне из сценария может возникнуть ситуация, когда сценарий приостанавливает свою работу до тех пор, пока не будет нажата клавиша ENTER. Это, кажется, происходит с командами, делающими вывод на stdout. Такое поведение может вызывать раздражение у пользователя.
Разместив команду wait, после запуска фонового задания, можно предотвратить такое поведение сценария.
|
Действует аналогично нажатию на комбинацию клавиш Control+-Z, за исключением того, что она приостанавливает работу командной оболочки.
Завершает сеанс работы командной оболочки, можно указать необязательный код завершения.
Выдает статистику исполнения команд в единицах системного времени, в следующем виде:
Принудительное завершение процесса путем передачи ему соответствующего сигнала (см. Пример 13-5).
Пример 11-24. Сценарий, завершающий себя сам с помощью команды kill
![]() |
Команда kill -l выведет список всех сигналов. Команда kill -9 — это "жесткий kill", она используется, как правило, для завершения зависших процессов, которые упорно отказываются "умирать", отвергая простой kill. Иногда достаточно подать команду kill -15. "Процессы-зомби", т.е. процессы, "родители" которых уже завершили работу, не могут быть "убиты" таким способом (невозможно "убить" "мертвого"), рано или поздно с ними "расправится" процесс init. |
Директива command COMMAND запрещает использование псевдонимов и функций с именем "COMMAND".
Конструкция builtin BUILTIN_COMMAND запускает внутреннюю команду "BUILTIN_COMMAND", на время запрещая использование функций и внешних системных команд с тем же именем.
Либо запрещает, либо разрешает вызов внутренних команд. Например, enable -n kill запрещает использование внутренней команды kill, в результате, когда интерпретатор встретит команду kill, то он вызовет внешнюю команду kill, т.е. /bin/kill.
Команда enable -a выведет список всех внутренних команд, указывая для каждой — действительно ли она разрешена. Команда enable -f filename загрузит внутренние команды как разделяемую библиотеку (DLL) из указанного объектного файла. [26].
Перенесена в Bash из ksh. Если функция объявлена как autoload, то она будет загружена из внешнего файла в момент первого вызова. [27] Такой прием помогает экономить системные ресурсы.
Обратите внимание: autoload не является частью ядра Bash. Ее необходимо загрузить с помощью команды enable -f (см. выше).
Таблица 11-1. Идентификация заданий
Нотация | Описание |
---|---|
%N | Номер задания [N] |
%S | Вызов (командная строка) задания, которая начинается со строки S |
%?S | Вызов (командная строка) задания, которая содержит строку S |
%% | "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) |
%+ | "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) |
%- | Последнее задание |
$! | Последний фоновый процесс |
[26] Как правило, исходные тексты подобных библиотек, на языке C, располагаются в каталоге /usr/share/doc/bash-?.??/functions.
[27] Тот же эффект можно получить с помощью typeset -fu.
Последние комментарии