Попытка анализа выходных данных пользовательской команды обычно становится самой хрупкой частью вашей программы с большим отрывом. (Особенно такой сложный, как вывод pstree.) Вывод предназначен для людей и не подходит для потребления компьютером. Он может меняться в зависимости от версии программы или в зависимости от локали системы (дата, язык, набор символов) или в зависимости от локальных настроек пользователя. Не разбирай pstree.
В Linux, основной метод для перечисления процессов - на источник этой информации - это список подкаталогов / прока с числовыми-только именами. Каждый такой каталог представляет процесс, а его имя - PID. Его родитель может быть определен путем чтения /proc/<pid>/status
и поиска PPid:
атрибута (рядом с Pid:
самим собой).
Для того, чтобы сделать это более удобно, вы можете использовать один из API - интерфейсов, предоставляемых libprocps : новый API - procps_proctab_read()
или старый API - readproc()
, readproctab3()
.
Для управления несколькими экземплярами службы используйте диспетчер служб. Большинство систем Linux включают одну (называемую systemd). Он автоматически отслеживает, какие процессы принадлежат какому сервису, поэтому такие команды, как systemctl restart smu@foo
(а также соответствующие API-интерфейсы C), всегда выбирают правильные PID.