Saída inconsistente para o nome do processo init usando 'ps'

5

Estou no Ubuntu 16.04 e estou seguindo o capítulo de serviços "Iniciando e Parando" da Bíblia Linux (9ª edição). Eu estou tentando encontrar o tipo de daemon de inicialização que tenho ( init ou systemd ) que requer que eu acho que processo tem PID de 1. No entanto, recebo 2 resultados diferentes dependendo de como eu executar o comando ...

webmaster@my-site:~$ ps -p1
  PID TTY          TIME CMD
    1 ?        00:00:29 systemd
webmaster@my-site:~$ ps -F -p1
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0  9420  5336   0 Feb23 ?        00:00:29 /sbin/init

Diz systemd para o PID1 depois de executar o primeiro comando, mas /sbin/init para o PID1 depois de executar o segundo comando.

    
por Cod3Citrus 16.03.2017 / 22:51

2 respostas

3

                        GRUB(GRand Unified Bootloader)
                                       |                                                          
                                       |
                                       |                                                  
                                       V
                                     Kernel
                                       |
                                Hardware check
                                       |
                            -----------------------
                            |init processes start |
                            -----------------------
                                      /|\
                                     / | \
                            SysVinit   |  systemd
                        init scripts   |
                                    Upstart

Deixe-me tentar explicar com o diagrama acima. Agora no Ubuntu ele começou com SysVinit , depois Upstart e finalmente Systemd . Cada um destes lidará com o processo init que inicia todas as coisas Linux e Ubuntu em geral.

Agora o Ubuntu está gradualmente se afastando de Upstart e em Systemd e é o atual controlador init no Ubuntu Xenial. O processo init inicia tudo (ou a maioria, pois o kernel tem seu próprio processo não relacionado a init ), mas o que manipula ou controla esse init process é SysVinit , Upstart ou Systemd dependendo da sua versão do Ubuntu. No seu caso, é o mais novo Systemd . Mas tenha em mente que você também verá restos do sistema antigo, onde comandos como initctl , service etc ainda são executados.

Assim, para obter as funções iniciais do sistema ou serviços em execução, o novo Ubuntu agora usa systemd a substituição para init daemon do antigo. Mas, para compatibilidade com versões anteriores, init ainda é executado em segundo plano.

De acordo com man ps , passar um sinal -F faz com que command arguments seja impresso. Então, neste caso, o comando é visto com:

ps -p 1

#Result
PID TTY          TIME CMD
1 ?        00:00:02 systemd

Depois, para ver os argumentos passados para esse comando:

ps -F -p 1

#Result
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0 46414  6336   1 05:48 ?        00:00:02 /sbin/init splash

Então, ps -p 1 == > command e ps -F -p 1 == > arguments passed para isso. Longa história curta -F Formato completo extra, vendo mais informações relacionadas ao comando ps -p 1 ou systemd . O que você vê é um processo init subjacente executado por systemd no Ubuntu Xenial. Anote o TIME : 00: 00: 02, que é o mesmo para os dois systemd e /sbin/init em ambas as formas de ps .

Por favor, olhe para esta página e você verá porque /sbin/init aparece quando a opção -F é usada. Systemd é executado com PID 1 as /sbin/init .

Fonte:

man ps

link

    
por George Udosen 16.03.2017 / 23:12
2

Para o Ubuntu 16.04, o padrão init é systemd

~$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 Oct  3 20:44 /sbin/init -> /lib/systemd/systemd

systemd é o que realmente está funcionando. A opção -F faz com que ps imprima a linha de comando exata (incluindo argumentos) usada para iniciá-la.

    
por user.dz 17.03.2017 / 10:59