Выбрать главу

backup_log.09069 9 admin_log.09l6:18

26.1.2. Создание уникальных временных файлов

При рассмотрении специальных переменных уже обсуждалась переменная $$ Она содержит ID или номер процесса, выполняющегося в текущий момент. Эти сведения применяются при создании временных файлов в текущем сценарии, поскольку ID процесса уникален в рамках сценария. Достаточно лишь создать файл и присоединить к нему символ $$, После завершения можно удалить все файлы, имеющие символ $$ в качестве расширения. Интерпретатор shell оценивает переменную $$ как текущий ID процесса и удаляет эти файлы, но оставляет файлы, к которым присоединен ID процесса.

В командной строке введите следующую команду:

$ echo $$

281

Это значение ID процесса приведено для примера; в вашем случае, скорее всего, будет получено другое значение. Если создать новый сеанс и ввести эту же команду, получится другой номер, поскольку будет запущен иной процесс.

$ echo $$

382

Ниже приводится сценарий, который создает два временных файла, обрабатывает и затем удаляет их.

$ pg tempfiles

#!/bin/sh

#tempfiles

#именование временных файлов

HOLD1=/tmp/hold1.$$

HOLD2=/tmp/hold2.$$

#выполнение определенной обработки с помощью этих файлов

df -tk > $HOLD1

cat $HOLD1 > $HOLD2

# удаление файлов

rm /tmp/*.$$

При выполнении этого сценария создаются следующие два файла.

hold1.408 hold2.408

Когда указывается команда rm /tmp/*.$$, интерпретатор shell в действительности выполняет команду rm /tmp/*.408.

Важно помнить, что ID процесса является уникальным только в конкретный момент времени. Например, если приведенный выше сценарий выполнить снова, получим новый ID процесса, поскольку речь идет о другом процессе.

Благодаря использованию даты можно отслеживать файлы, созданные для специальных целей. Помимо этого, значительно облегчается очистка файлов на базе определенных дат, поскольку с первого взгляда видно, какие файлы создавались раньше, а какие позже.

Временные файлы создаются легко и быстро; кроме того, они являются уникальными для данного процесса. После того как сценарий завершает обработку, их несложно удалить без искажения остальной информации.

26.2. Сигналы

Сигнал относится к типу сообщений, которые пересылаются из системы для информирования команды или сценария о совершении какого‑либо события. Обычно речь идет об ошибках, связанных с функционированием памяти, о проблемах с доступом к информации или об определенных пользовательских попытках прекратить процесс. Сигналы представлены числами. Ниже приводится список наиболее распространенных сигналов и их значений.

Номер сигнала Название сигнала Значение
1 SIGHUP "Зависание" или прекращение выполнения родительского процесса
2 SIG1NT Прерывание с помощью клавиатуры; обычно используется комбинация клавиш [Ctrl+C]
3 SIGQUIT Завершение выполнения с помощью клавиатуры
9 SIGKILL Прекращение выполнения определенного процесса
11 SIGSEGV Нарушение сегментации (память(
15 SIGTERM Завершение выполнения программы (завершение выполнения программы, заданное по умолчанию)

Существует сигнал 0, который ранее уже рассматривался (при создании файла .logout). Этот сигнал является сигналом "выхода из интерпретатора shell". Чтобы переслать сигнал 0, введите в командную строку команду exit либо примените к процессу или укажите в командной строке комбинацию клавиш [Ctrl+D].

Для пересылки сигнала используется формат:

kill [- номер сигнала:| имя сигнала] ID процесса

Если команда kill вводится без указания номера или названия сигнала, то она по умолчанию относится к сигналу с номером 15. Для просмотра списка всех сигналов примените следующую команду:

$ kill -1
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGIOT 7} SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR