Se o sistema init é determinístico, é muito provável que os daemons iniciados pelo sistema init iniciem com o mesmo pid através de reinicializações, já que o mesmo código será executado em cada inicialização (embora com aleatorização do ocasional fsck
ou selinux
de rotulagem ou outro código não-em-todo-inicial).
No entanto, systemd
no RHEL7 não é determinístico: os PIDs são alocados em sequência, mas systemd
executa tarefas em paralelo possivelmente em vários núcleos, possivelmente aguardando vários serviços de hardware ou de rede. Vamos ver o que acontece antes e depois na lista de processos:
$ ps axo pid,command | sort -n > before
$ sudo reboot
...
$ ps axo pid,command | sort -n > after
$ comm -12 before after | grep -v \[
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
PID COMMAND
1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
745 /usr/lib/systemd/systemd-logind
864 /usr/sbin/NetworkManager --no-daemon
$
Portanto, são dois processos (exceto os óbvios não-aleatórios "PID eins" e os encadeamentos do kernel marcados com [
) com o mesmo PID. Em 30 reinicializações que registram a mesma informação, parece que systemd
é muito bom em randomizar os pids; durante esses reinícios /usr/lib/systemd/systemd-logind
apareceu em:
PID PERCENTAGE
733 5%
734 5%
737 15%
739 5%
743 5%
746 5%
748 5%
749 5%
752 10%
753 10%
755 5%
758 5%
760 5%
764 5%
771 5%
773 5%
Os dados foram capturados com um serviço de inicialização:
[Unit]
Description=recordpidorder
After=getty.target
[Service]
Type=oneshot
ExecStart=/root/pidandboots
[Install]
WantedBy=multi-user.target
que foi executado:
#!/bin/bash
NF=/root/sequence
[[ ! -e "$NF" ]] && echo 0 > "$NF"
CUR=$(( 1 + $(< "$NF") ))
ps haxo pid,command > "/root/pidorder$CUR"
[[ $CUR -gt 30 ]] && mv /root/pidandboots /root/pidandboots.done
echo "$CUR" > "$NF"
reboot
Quando o sistema estiver ativo e em execução, a ordem de criação do processo será randomizada como não-at- @reboot
cron jobs, login e execução de vários comandos diferentes, etc. Isso dependerá do sistema, quantos PIDs serão criados sobre isso, etc.
Então, sim, é estatisticamente possível que um daemon apareça no mesmo PID em um sistema RedHat que use systemd
. No entanto, as probabilidades variam dependendo do hardware e dos serviços exatos que o sistema oferece.