Qualquer coisa com o PPID de 1 é, na maioria das vezes, um daemon. Mas há situações que podem surgir quando os processos podem se tornar filhos de um que não são tecnicamente daemons. Então, os métodos que eu discuto abaixo são para demonstrar como você iria determinar se um PID é de 1, não necessariamente que seja um daemon real.
Por exemplo
$ ps -xj
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
8420 1211 1211 8420 pts/4 1211 S+ 1000 0:01 ssh dufresne
1 2276 2275 2275 ? -1 Sl 1000 0:48 /usr/bin/gnome-keyring-daemon --daemonize --login
2196 2278 2278 2278 ? -1 Ssl 1000 0:39 gnome-session
1 2288 2278 2278 ? -1 S 1000 0:00 dbus-launch --sh-syntax --exit-with-session
1 2289 2289 2289 ? -1 Ssl 1000 6:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
1 2358 2289 2289 ? -1 Sl 1000 0:01 /usr/libexec/gvfsd
O trecho da Wikipedia pode lançar alguma luz sobre as coisas também, mas também deixa as coisas um pouco vagas sobre como determinar se um processo é um daemon ou não.
trecho da WikipediaIn a Unix environment, the parent process of a daemon is often, but not always, the init process. A daemon is usually either created by a process forking a child process and then immediately exiting, thus causing init to adopt the child process, or by the init process directly launching the daemon. In addition, a daemon launched by forking and exiting typically must perform other operations, such as dissociating the process from any controlling terminal (tty). Such procedures are often implemented in various convenience routines such as daemon(3) in Unix.
NOTA: em sistemas que fazem uso de SystemD (distribuições Red Hat como o Fedora), normalmente não há init
process mas sim isto:
$ ps -j -1
PID PGID SID TTY STAT TIME COMMAND
1 1 1 ? Ss 0:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
Esse é o processo com o PID 1.
No sistema Debian / Ubuntu eles terão um processo ainda chamado init
:
$ ps -j -1
PID PGID SID TTY STAT TIME COMMAND
1 1 1 ? Ss 0:02 /sbin/init
Então, o que é um daemon?
E aqui está a razão pela qual pode ser complicado determinar se algo é um daemon ou não quando o seu PPID é 1:
Um processo pode tornar-se filho do processo init, ( NOTA: que init
processo é PID 1), quando seu pai é morto ou o rejeita, esses processos não são necessariamente daemons, mas ainda será mostrado como tendo seu PPID igual a 1 .
Portanto, para determinar se algo é daemon ou não, é provável que exista uma bateria de testes, e não simplesmente verificar se o PPID é 1.
Então, onde isso nos deixa?
Para determinar se algo é um daemon, você provavelmente precisará recorrer a vários testes, como:
- PPID 1?
- Tem TTY anexado?
- É um serviço?
sudo service ...
? - É gerenciado pelo Systemd, Upstart ou SysV?
- Está escutando em uma porta?
- Está escrevendo em um arquivo de log? Syslog?
Então, temos que recorrer à "digitação de pato", se ela se chocar e nada, é provável que seja um pato, mas mesmo as características acima podem enganá-lo.