Регистрация идентификатора процесса сервера

В производственной среде у системных администраторов часто возникает необходимость быстро найти идентификатор процесса сервера в случае нарушения его работы или аварийного завершения. Хотя и есть возможность найти сервер по списку всех процессов в системе, для выполнения такой операции на компьютере с большой нагрузкой может потребоваться значительное время. Чтобы исключить для системного администратора необходимость поиска идентификатора процесса сервера, в большинстве производственных серверов предусмотрена регистрация идентификатора процесса в определенном файле. Если у системного администратора возникает необходимость найти какой-то процесс сервера, он ищет идентификатор процесса в этом файле. Отели в монастырях - Тур Новости: туры в Португалию из Москвы. Забронируйте отдых в Португалии.

Какой файл должен применяться сервером для хранения его идентификатора процесса? Вполне очевидно, что для этой цели целесообразнее всего использовать файл блокировки сервера. Дело в том, что для каждой службы применяется только один файл блокировки, который обычно не имеет какого-либо иного полезного содержания.

30.19. Программирование сервера для регистрации его идентификатора процесса

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

char pbuf[10]; /* Массив для хранения идентификатора программы в коде ASCII */
 /* Предполагается, что файл блокировки был открыт и его дескриптор */
 /* присвоен переменной If, как описано в предыдущем разделе */
(void)sprintf(pbuf,"%6d",getpid()); (void)write(If,pbuf,strlen(pbuf)); 

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

30.20. Ожидание завершения работы дочернего процесса

Когда происходит завершение работы какого-либо процесса Linux, система не может выполнить операцию завершения до конца, пока не сообщит об этом родительскому процессу. В родительском процессе должна быть вызвана системная функция wait, и только после этого операция завершения может быть закончена. Между тем, завершающийся процесс находится в так называемом состоянии зомби (процесс, находящийся в таком состоянии, иногда называют несуществующим процессом).

Похожие статьи Меню Опрос Фото Популярное