Usando processos
Analisando a saída de alguns comandos ps
que podem detectar as várias versões de systemd
& upstart
, que pode ser criado da seguinte forma:
upstart
$ ps -eaf|grep '[u]pstart'
root 492 1 0 Jan02 ? 00:00:00 upstart-udev-bridge --daemon
root 1027 1 0 Jan02 ? 00:00:00 upstart-socket-bridge --daemon
systemd
$ ps -eaf|grep '[s]ystemd'
root 1 0 0 07:27 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
root 343 1 0 07:28 ? 00:00:03 /usr/lib/systemd/systemd-journald
root 367 1 0 07:28 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 607 1 0 07:28 ? 00:00:00 /usr/lib/systemd/systemd-logind
dbus 615 1 0 07:28 ? 00:00:13 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
Prestar atenção ao nome do processo que é o PID # 1 também pode esclarecer qual sistema init está sendo usado. No Fedora 19 (que usa systemd
, por exemplo:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:27 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
Observe que não é init
. No Ubuntu com Upstart ainda é /sbin/init
.
$ ps -efa|grep init
root 1 0 0 Jan02 ? 00:00:03 /sbin/init
NOTA: Mas use isso com um pouco de cautela. Não há nada definido na pedra que diga que um determinado sistema de inicialização sendo usado em uma determinada distribuição tenha para ter systemd
como o PID # 1.
genérico
$ (ps -eo "ppid,args" 2>/dev/null || echo "ps call error") \
| awk 'NR==1 || $1==1' | less
PPID COMMAND
1 /lib/systemd/systemd-journald
1 /lib/systemd/systemd-udevd
1 /lib/systemd/systemd-timesyncd
Veja os processos com o ppid 1 (filhos do processo init). (Alguns dos) nomes de processos filhos podem apontar para o sistema init em uso.
O sistema de arquivos
Se você interrogar o executável init
, poderá obter algumas informações dele também. Simplesmente analisando a saída --version
. Por exemplo:
upstart
$ sudo /sbin/init --version
init (upstart 1.5)
Copyright (C) 2012 Scott James Remnant, Canonical Ltd.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
systemd
$ type init
init is /usr/sbin/init
NOTA: O fato de init
não estar em sua localização padrão é um pouco de hint / tell. Está sempre localizado em /sbin/init
nos sistemas sysvinit.
sysvinit
$ type init
init is /sbin/init
Também isso:
$ sudo init --version
init: invalid option -- -
Usage: init 0123456SsQqAaBbCcUu
Conclusões
Portanto, não parece haver uma maneira de fazê-lo, mas você poderia formular um conjunto de verificações que identificaria qual sistema de init você está usando com um alto grau de confiança.