Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

Ниже приводится пример пересылки сигнала 9 (гарантированное уничтожение) для уничтожения процесса mon_web, который выполняется в системе. Сначала примените команду ps для создания процесса.

$ ps -ef | grep mon_web | grep -v root

157 ? S 0:00 mon_web

Если в системе не поддерживается команда ps -ef, то воспользуйтесь командой ps xa. Для уничтожения процесса можно применить команду:

kill -9 157

или

kill -s SIGKILL 157

В некоторых системах можно не указывать опцию -s. Например, введите команду

kill SIGKILL 157

В приведенном ниже сценарии уничтожение процесса основано на использовании имени процесса. Имя устраняемого процесса указывается в виде параметра. Выполняется проверка, что данный процесс был действительно уничтожен. Утилита grep используется для обнаружения всех совпадающих имен процесса. Если соответствующие имена обнаруживаются, поступает запрос пользователю, следует ли уничтожить найденные процессы. Для уничтожения процесса применяется команда kill -9.

Соответствующий сценарий выглядит следующим образом:

$ pg pskill

#!/bin/sh

# pskill

HOLD1=/tmp/HOLD1.$$

PROCESS=$1

usage {

# usage

echo "Usage :''`basename $0` process_name"

exit 1

}

if [ $# -ne 1 ]; then

usage

fi

case $1 in

*)

применение программы grep для исключения нашего сценария из вывода команды ps

извлечение полей 1 и 6, перенаправление во временный файл

ps x | grep $PROCESS | grep -v $0 | awk '{print $1"\t" $6}'>$HOLD1

# ps -ef |.. если команда ps x не срабатывает

;;

esac

#есть ли файл??

if [ !
– s $HOLD1 ]; then

echo "No processes found…sorry"

exit 1

fi

#просмотр содержимого временного файла и отображение значений полей

while read LOOP1 LOOP2

do

echo $LOOP1 $LOOP2

done <$HOLD1

echo -n "Are these the processes to be killed? [y..n] >"

read ANS

case $ANS in

Y|y) while read LOOP1 LOOP2

do

echo $LOOP1

kill -9 $LOOP1 done

<$HOLD1

rm /tmp/*.$$

;;

N|n);;

esac

При выполнении сценария поток вывода имеет вид:

$ pskill web

1760 ./webmon

1761 /usr/apps/web_col

Are these the processes to be killed? [y..n] >y

1760 1761 [1]+ Killed webmon

Чтобы убедиться в том, что процесс уничтожен, введите команду повторно:

$ pskill web

No processes found..sorry

26.2.2. Обнаружение сигнала

Некоторые сигналы можно захватить и выполнить соответствующие действия. Другие сигналы нельзя уловить. Например, если команда получает сигнал 9, пользователю не нужно предпринимать какие-либо действия.

Если ограничиться написанием сценариев, следует обращать внимание только на сигналы 1,2,3 и 15. Если сценарий получает сигнал, возможен один из трех вариантов дальнейших действий: 1. Ничего не предпринимать, система самостоятельно отреагирует на полученный

сигнал.

1. Захватить сигнал, но игнорировать его.

2. Захватить сигнал и предпринять определенные действия.

Большинство сценариев используют сигнал с номером 1. Этот метод применяется далее в книге во всех сценариях.

Чтобы применить два других метода, нужно воспользоваться командой trap.

26.3. Команда trap

Команда trap позволяет перехватывать сигналы. Формат команды trap:

trap "имя" сигнал(ы)

Имя представляет собой функцию, содержащую инструкции, которые выполняются при перехвате сигнала. В действительности функцию следует называть так, чтобы ее имя было связано именно с перехваченными сигналами. Имя следует заключать в двойные кавычки (""). Сигналы являются входящими.

Когда сигнал перехватывается, сценарий обычно находится в стадии обработки. Самые распространенные действия следующие:

1. Очистить временные файлы.

2. Игнорировать сигналы.

  • Читать дальше
  • 1
  • ...
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win