Шрифт:
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
26.2.1. Уничтожение процесса
При пересылке сигнала 1 процесс заново считывает файл конфигурации. Например, если при выполнении процесса под названием демон dns файлы базы данных изменяются, не следует уничтожать демон и заново запускать его. Выполните всего лишь команду kill -1. В этом случае файлы конфигурации просматриваются заново.