Меняем proctitle в программе на Perl

В очередной версии сервера SMPP озадачился вопросом, как бы упростить себе мониторинг демона подручными средствами. Усугубилось это тем, что компоненты сервера стали форкаться из одного скрипта и просто по результату запуска команды /bin/ps ax нельзя было определить, какой из процессов чем занимается.

Тут то мне и пришла в голову мысль, что тот же PostgreSQL позволяет за счет модификации proctitle проводить предварительную диагностику с помощью обычных top или ps. Как минимум, можно выяснить, с какой базой работает процесс, убивающий сервер.

Поиск по CPAN привел к модулю Sys::Proctitle, предоставляющему API к информации об имени процесса в таблице процессов. И теперь кусок кода ниже позволяет сразу выяснить, сколько ESME подключены к нашему SMPP-серверу:

use Sys::Proctitle qw/:all/;
...
setproctitle("smppd - SMPP handler ($clients_num connections)");

Как можно заметить, вывод команды ps стал более информативным:

$ /bin/ps ax | grep smp
23803 pts/4    S+     0:00 smppd - SMPP handler (2 connections)
23804 pts/4    S+     0:00 smppd - queue handler (IDLE)