Работа с процессами UNIX

При выполнении программы оболочки UNIX создает ее активный экземпляр, называемый процессом. UNIX присваивает этому процессу уникальный идентификационный номер, называемый идентификационным номером процесса ( process ID — PID).Администратор баз данных должен уметь отслеживать процессы, имеющие отношение к его программам и к базе данных, за управление которой он отвечает.

Сбор информации о процессах с помощью команды ps

Для сбора информации обо всех процессах, которые работают в системе в текущий момент, применяется команда ps с ее многочисленными параметрами. Запуск ее c параметром –ef позволяет узнать идентификационный номер каждого процесса, пользователя, от имени которого он выполняется, программу, которую пользователь для него использует, и длительность выполнения этой программы.

Ниже приведен пример, в котором команда psef применяется для отображения перечня процессов, но из-за того, что этот перечень будет очень длинным, также еще используется и передаваемая по конвейеру команда grep для фильтрации результатов.Эта команда grep гарантирует отображение в перечне только тех процессов, которые содержат слово “pmon”. Процесс pmon является важным фоновым процессом Oracle и будет более подробно рассматриваться в следующих заметках моего блога. Вывод показывает, что в текущий момент в системе запущены три разных базы данных Oracle:

 
$ ps -ef | grep pmon
oracle 10703 1 0 09:05:39 ? 0.00 ora_pmon_test
oracle 18655 1 0 09:24:00 ? 0.00 ora_pmon_prod1
oracle 10984 1 0 09:17:50 ? 0.00 ora_pmon_finance
$

Выполнение процессов после выхода из системы

Иногда после запуска программы из терминала бывает так, что через какое-то время возникает необходимость выйти из него. При выходе из системы всем процессам, которые были запущены в данном сеансе, посылается сигнал “отсоединения” (hangup).

Во избежание внезапного прерывания работы выполняющихся программ при отключении, можно запускать программы оболочки с параметром nohup, означающим “не отсоединяться” (no hangup). Тогда при отключении эти (длинные) программы будут все равно продолжать выполняться.

Ниже приведен пример указания для процесса параметра nohup

$ nohup test.ksh

Выполнение процессов в фоновом режиме

Любое задание можно запускать и затем выполнять в фоновом режиме, возвращая управление терминалу. Для этого достаточно указать после имени программы параметр $, как показано в следующем примере (можно предварительно проверить, выполняется ли процесс данной программы с помощью либо команды ps –ef, либо команды ps –aux):

 
$ test.ksh &
[1] 27149
$

Также можно переводить любое выполняющееся в текущий момент задание в фоновый режим, нажимая комбинацию клавиш <Ctrl+Z>. При этом задание сначала приостановится, а затем запустится снова в фоновом режиме. Переводить любое задание,которое уже выполняется в фоновом режиме, обратно в активный, можно с помощью команды fg номер_задания.

Завершение процессов с помощью команды kill

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


На заметку! Хотя нежелательный процесс или сеанс пользователя всегда можно завершить с помощью команды kill прямо из самой системы UNIX, все-таки лучше применять для этого методы, предусмотренные в Oracle. Объясняется это несколькими причинами. Во-первых, можно случайно уничтожить не тот сеанс. Во-вторых, в случае применения совместно используемого сервера Oracle, процесс может порождать несколько других процессов, из-за чего, следовательно, уничтожение диспетчерского сеанса может вылиться в удаление гораздо больше количества сеансов, чем планировалось.


Для завершения любого процесса можно использовать не только один сигнал kill.В целом формат команды kill выглядит следующим образом: 

kill -[сигнал] номер_PID

На месте параметра сигнал указывается конкретный сигнал, который команда kill должна отправить процессу, а на месте параметра номер_PID — идентификационный номер процесса, который должен быть уничтожен. Для аккуратного завершения процесса применяется сигнал SIGTERM, ссылаться на который в команде kill можно как по имени, так и по номеру. Например, любая из следующих команд приведет к завершению процесса с идентификационным номером 21427:

 
$ Kill -SIGTERM 21427
$ Kill -15 21427

Если сигналу SIGTERM, который предназначен завершать процессы аккуратным образом, не удастся завершить сеанс, можно отправить такой сигнал, который заставит процесс прекратить работу принудительным образом, а именно — kill -9:

$ kill -9 21427

Вас заинтересует / Intresting for you:

Работа с файлами и каталогами ...
Работа с файлами и каталогами ... 6001 просмотров Владимир Tue, 21 Nov 2017, 13:19:25
Подключение к серверу UNIX с Б...
Подключение к серверу UNIX с Б... 1840 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Поиск файлов и каталогов в Uni...
Поиск файлов и каталогов в Uni... 1600 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Редактирование файлов с помощь...
Редактирование файлов с помощь... 1850 просмотров Владимир Tue, 21 Nov 2017, 13:19:25
Войдите чтобы комментировать