Представим, что нужно из программы, запущенной с нужными привилегиями, управлять службой systemd/upstart/etc. Как это правильно делать?
Понятно, что в общем случае всегда поможет exec("/sbin/service xxx restart");
(или соответствующий аналог), но хотелось бы какие-то сишные интерфейсы, без system и exec.
Больше остальных интересует systemd, с высокой вероятностью кроме него поддерживать ничего не нужно будет. Нашел описание интерфейса D-Bus к нему. Но из исходников systemctl я выяснил, что он работает не через D-Bus, а через какой-то свой сокет, либо через kdbus. Я так понял, что это внутренняя шина, и лучше ей не пользоваться. Короче, что правильно использовать, D-Bus, system(), или может есть какие-то другие пути?
В целях самообразования интересно также, есть ли какой-то подобный интерфейс у upstart?
UPD. DBus интерфейс для Upstart тоже есть, и более того, он является предпочитаемым с точки зрения разработчиков Upstart.