Це може бути складним, оскільки у вас можуть бути окремі екземпляри одного і того ж процесу, які живуть незалежно. Наприклад, сервери, які прослуховують різні порти, або служби, що працюють як різні користувачі. Для того, щоб розрізняти ці екземпляри, потрібно призначити кожному з них унікальний тег. Тег часто є файлом, але він може бути локальним сокетом у абстрактному просторі імен, порту TCP тощо. - це зробить будь-який унікальний ідентифікатор. Коли тег є файлом, це може бути звичайний файл, що містить ідентифікатор процесу (pidfile), або названий канал або сокет, який файл слухає, і т.д. В ідеалі тег - це кінцева точка зв'язку, яка дозволяє клієнтам підключатися до цього процесу.
Кожен з цих різних типів тегів призводить до різного способу перевірки, чи працює і запущений екземпляр, який ви шукаєте. Наприклад, за допомогою локального файлового сокета спробуйте підключитися до нього та запустіть процес, якщо в цьому сокеті немає прослуховування процесу. Якщо тег є pidfile, перевірте, чи є процес з цим ідентифікатором процесу, але будьте уважні, що це неміцно, оскільки якщо процес загинув, може виникнути незв'язаний процес, який повторно використав свій ідентифікатор. Остерігайтеся, що якщо два клієнти намагаються досягти процесу за короткий проміжок часу, вони можуть виявити, що процес не існує, і обидва намагаються його запустити; правильний захист від цієї умови гонки може бути складним.
Простіше керувати випадками, коли вони починаються одним і тим самим процесом супервізора, і цей процес супервізора виявляє, коли екземпляри гинуть, і відповідно реагує. Багато програм моніторингу послуг, які можуть це зробити.
Якщо програма не відповідає на відому кінцеву точку зв’язку і не керується програмою супервізора, тег бідолахи - це pidfile: файл, що містить ідентифікатор процесу. Коли ви запускаєте процес, запишіть pid у файл із заздалегідь заданим іменем. Коли вам потрібен процес, прочитайте pidfile і перевірте, чи є процес із цим pid. Коли ви вбиваєте процес, видаліть pidfile. Найбільш помітною проблемою з непідконтрольним pidfile є те, що якщо процес вмирає, його pid може бути повторно використаний деяким непов'язаним процесом. Потрібно, принаймні, перевірити ім'я процесу чи виконуваний процес, щоб переконатися, що ви спілкуєтесь із правильним процесом. У багатьох варіантах Unix є команда pgrep :pgrep SOMENAME
перераховує процеси, ім’я яких містить SOMENAME як підряд, з додатковими опціями обмеження до конкретного користувача, вимагати точного відповідності, змінити те, яке з кількох можливих понять "ім'я процесу" використовується тощо.
ps -ef | grep -v grep | grep "process_name" || run_command_here