Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill
Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill
#!/bin/bash
# self-destruct.sh
kill $$ # Сценарий завершает себя сам.
# Надеюсь вы еще не забыли, что "$$" -- это PID сценария.
echo "Эта строка никогда не будет выведена."
# Вместо него на stdout будет выведено сообщение "Terminated".
exit 0
# Какой код завершения вернет сценарий?
#
# sh self-destruct.sh
# echo $?
# 143
#
# 143 = 128 + 15
# сигнал TERM
Команда kill -l выведет список всех сигналов. Команда kill -9 -- это "жесткий kill", она используется, как правило, для завершения зависших процессов, которые упорно отказываются "умирать", отвергая простой kill. Иногда достаточно подать команду kill -15. "Процессы-зомби", т.е. процессы, "родители" которых уже завершили работу, не могут быть "убиты" таким способом (невозможно "убить" "мертвого"), рано или поздно с ними "расправится" процесс init.
command
Директива command COMMAND запрещает использование псевдонимов и функций с именем "COMMAND".
Это одна из трех директив командного интерпретатора, которая влияет на обработку команд. Другие две -- builtin и enable.
builtin
Конструкция builtin BUILTIN_COMMAND запускает внутреннюю команду "BUILTIN_COMMAND", на время запрещая использование функций и внешних системных команд с тем же именем.
enable
Либо запрещает, либо разрешает вызов внутренних команд. Например, enable -n kill запрещает использование внутренней команды kill, в результате, когда интерпретатор встретит команду kill, то он вызовет внешнюю команду kill, т.е. /bin/kill.
Команда enable -a выведет список всех внутренних команд, указывая для каждой -- действительно ли она разрешена. Команда enable -f filename загрузит внутренние команды как разделяемую библиотеку (DLL) из указанного объектного файла[ 26 ].
autoload
Перенесена в Bash из ksh. Если функция объявлена как autoload, то она будет загружена из внешнего файла в момент первого вызова[ 27 ]. Такой прием помогает экономить системные ресурсы.
Обратите внимание: autoload не является частью ядра Bash. Ее необходимо загрузить с помощью команды enable -f (см. выше).
Таблица 11-1. Идентификация заданий
Нотация Описание %N Номер задания [N] %S Вызов (командная строка) задания, которая начинается со строки S %?S Вызов (командная строка) задания, которая содержит строку S %% "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) %+ "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) %- Последнее задание $! Последний фоновый процесс