AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 496127
Accepted
Yves
Yves
Asked: 2019-01-23 22:14:01 +0800 CST2019-01-23 22:14:01 +0800 CST 2019-01-23 22:14:01 +0800 CST

Como um log pode ser impresso para ser exibido durante o desligamento, reinicialização ou inicialização?

  • 772

Como todos sabemos, quando reinicializamos, desligamos ou iniciamos um sistema, alguma mensagem será impressa na tela, aqui está uma captura:

insira a descrição da imagem aqui

Meu sistema é o Ubuntu 16.04, eu sei que essas mensagens de log acima vêm do systemd.

No meu entendimento, um processo de usuário normal pode imprimir coisas na tela porque o sistema fornece três descritores de arquivo: 0, 1 e 2. Podemos encontrá-los em /proc/<PID>/fd/. Aqui está um exemplo:

root@X86-Xenial-6:~# ls /proc/3467/fd
0  1  2  255

O 3467é um programa hello-world, não sei o que 225é mas sei disso 0, 1e 2são entrada padrão, saída padrão e erro padrão.

Então, eu tenho uma pergunta: quando o sistema começa a desligar, reiniciar ou inicializar, o processo do usuário não foi criado ou foi destruído, o que significa que /proc/não existe mais, neste caso, 0e 1não 2existe .

Então, por que a mensagem vinda do systemd pode ser impressa na tela? O kernel pode imprimir coisas porque controla a tela imediatamente, mas não acho que o systemd pertença ao kernel, então como ele poderia imprimir coisas na tela também? Que tipo de função ou API é usada?

debian ubuntu
  • 2 2 respostas
  • 1139 Views

2 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2019-01-23T22:38:11+08:002019-01-23T22:38:11+08:00

    A inicialização e o desligamento são amplamente conduzidos no espaço do usuário, não pelo kernel. Assim que o kernel termina de inicializar, ele procura inite inicia isso, como um processo normal, com os descritores de arquivo padrão apontando para o console. Portanto init(no seu caso, o script initramfs e depois o systemd) pode gravar em sua saída padrão e o que quer que ele escreva aparecerá na tela (ou onde quer que a saída do console esteja configurada para aparecer). Este continua sendo o caso até que o kernel seja desligado ou reinicializado, o que acontece depois que o espaço do usuário foi desligado (e depois que todos os logs de desligamento foram gravados no console).

    Como um aparte, note que /procé apenas um meio de acessar certas informações mantidas pelo kernel; essas informações existem /proc, estejam montadas ou não.

    Observe também que

    Como todos sabemos, quando reinicializamos, desligamos ou iniciamos um sistema, alguma mensagem será impressa na tela

    não é necessariamente verdade — muitos sistemas agora inicializam e desligam sem mostrar logs, então não podemos presumir que “todos nós sabemos”.

    • 3
  2. ctrl-alt-delor
    2019-01-24T02:24:49+08:002019-01-24T02:24:49+08:00

    Uma resposta curta, para esclarecer alguns mal-entendidos.

    • O processo é feito no espaço do usuário: especificamente inito primeiro processo do usuário.
    • Você não precisa de /proc para que os descritores de arquivo existam. Se a única maneira de acessar descritores de arquivo fosse por meio de um arquivo, como você acessaria um descritor de arquivo? (você abriria o arquivo para /procser retornado um descritor de arquivo, tente procurá-lo em /procum descritor de arquivo…). /procé apenas uma visualização, é necessária apenas para processos que relatam outros processos.
    • O descritor de arquivo 255 de lsseu exemplo é do diretório /proc/3467/fd: lstem que abrir o diretório, então esperamos um descritor de arquivo extra. Temos um extra, então é isso.
    • /proc/fd/1etc apontam para outros dispositivos. por exemplo 1 -> /dev/pts/3. Faça umls -l /proc/self/fd
    • Quando o kernel for iniciado init, ele conectará seu stdin, stdout, stderr à tela (um dispositivo tty, que é renderizado na tela) ou em outro lugar.
    • inité processo 1(No seu sistema systemd).
    • 1

relate perguntas

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Como digitar ü no Pinyin IME?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve