Книга: Искусство программирования на языке сценариев командной оболочки

Пример 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
%% "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне)
%+ "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне)
%- Последнее задание
$! Последний фоновый процесс

Оглавление книги


Генерация: 1.517. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз