Os seguintes comandos não retornam nenhum resultado
ps -C init -o pid=
ps -C /sbin/init -o pid=
pgrep -x /sbin/init
onde, como o seguinte comando fornece a saída da seguinte forma:
$ ps -ealf | grep init
4 S root 1 0 0 80 0 - 6266 - 08:35 ? 00:00:03 /sbin/init auto noprompt
$ pidof init
1
Gostaria de saber como obter o PID do processo init usando o método ps -C e pgrep . O que estou fazendo de errado aqui?
Estou no Ubuntu 16.04.3 LTS com kernel 4.10.0-27-genérico de 32 bits
No Ubuntu 16.04,
/sbin/init
há um link simbólico para systemd:ps -C
lê o nome do comando em/proc/<pid>/stat
. Vejaman 5 proc
:Como o systemd suporta a reexecução de si mesmo como init (por exemplo,
systemctl daemon-reexec
), ele tenta mudar isso osystemd
mais rápido possível, se iniciado como/sbin/init
. Da fonte :Portanto,
ps -C init
não corresponderá a um systemd de PID 1. Compgrep
, você pode usar-f
.pgrep -f
checks/proc/<pid>/cmdline
, e o systemd não tenta mudar isso. O segundosystemd
naps
saída é o init da minha sessão de usuário.Qualquer sistema usando systemd sem sysvcompat se comportará assim. Embora /sbin/init seja um link para systemd, o nome do comando ainda é systemd. Ao usar a opção -C do ps, isso procurará apenas systemd. Ao usar a opção -f de ps, significando que o formato completo imprime os argumentos de comando (args) em vez dos nomes de comando (comm) na coluna CMD e, de fato, o systemd está iniciando usando o arquivo
/sbin/init
Tente este comando:
Na verdade, isso também incluiria outros argumentos, se houvesse algum, e também implica que os argumentos no Unix, graças aos links simbólicos, podem levar a nomes de comando totalmente diferentes para os quais eles apontam.