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 |