У меня тоже была такая же проблема, и я провел множество тестов на некоторых машинах RedHat / CentOS / Debian / Ubuntu / Mint. Это то, к чему я пришел, с хорошими результатами.
Найдите имя исполняемого файла с PID 1:
ps -p 1
Если это systemd или Upstart, проблема решена. Если это "init", это может быть символическая ссылка или что-то другое, кроме предварительного имени. Вперед, продолжать.
Найдите реальный путь к исполняемому файлу (работает только с правами root):
ls -l `which init`
Если init
является символической ссылкой на Upstart или systemd , задача решена. В противном случае можно почти наверняка, что у вас есть SysV init. Но это может быть исполняемый файл с неверным названием. Вперед, продолжать.
Найдите пакет, который предоставляет исполняемый файл. К сожалению, это зависит от дистрибутива:
dpkg-query -S (реальный путь к исполняемому файлу) # Debian
rpm -qf (реальный путь к исполняемому файлу) # RedHat
Затем, если вы хочу написать сценарий (самая забавная часть, ИМХО), это мои однострочные (запускаются как root):
ls -l $(which $(ps -p 1 o comm)) | awk '{ system("dpkg-query -S "$NF) }' # Debian
ls -l $(which $(ps -p 1 o comm)) | awk '{ system("rpm -qf "$NF) }' # RedHat