
Enquanto estava correndo, apt upgrade
enviei acidentalmente um Ctrl- Spara aquela janela do terminal.
Agora eu conheço XOFF
, XON
, Ctrl- Qe algo novo sobre teletipo.
Quando enviei um Ctrl- Qpara o terminal "pausado", apt
continuei com seu trabalho.
Ao ler sobre XOFF
, não está claro para mim o que aconteceu apt
ou o que acontece geralmente em qualquer comando que recebe um arquivo XOFF
. htop
para de atualizar o display, o que é bom saber, mas htop
ainda está funcionando?
Ainda estava apt
correndo? Ou foi apt
e htop
efetivamente pausado, congelado?
Aparentemente, os processos ainda podem receber entrada, enquanto XOFF
'd, então ainda estão em execução.
O que está acontecendo? Por exemplo, o contador do programa, aparentemente não para simplesmente de incrementar o contador do programa, congelando o programa.
Depende de como o comando está programado para lidar com o XOFF? Existe um comportamento geral que pode ser esperado com os comandos básicos do Linux?
Observaçãoqueessee perguntas semelhantes não contêm respostas à minha pergunta, pois não mencionam o que acontece no próprio programa. Por exemplo, não sei se apt
continuou a funcionar silenciosamente ou se foi congelado/pausado.
Responder1
Como você já deve saber, XON
e XOFF
, vinculados a Ctrl+ Se Ctrl+ Qpor padrão, sãocontrole de fluxo de softwarepersonagens e, em princípio, relíquias dovelhos tempos de terminais de teletipo para impressão em papel. Eles eram usados em momentos em que um equipamento receptor (geralmente uma impressora de papel) às vezes não conseguia acompanhar a entrada enviada por um remetente remoto.
Hoje em dia, os teletipos de papel já não são utilizados, mas a ideia por trás deles ainda é mantida na estrutura de software de um "terminal" (ver, por exemplo,aquieeste artigo muito bom sobre a história do TTY), que herdou e ainda implementa alguns dos conceitos usados nos terminais originais baseados em papel - sendo um deles a capacidade de interpretar caracteres de controle de fluxo.
Normalmente, um programa rodando "no console", ou seja, conectado a um pseudo-terminal, não consegue ver os caracteres XON
e XOFF
porque eles são capturados por padrão pelo terminal, onde o comportamento padrão XOFF
é parar de imprimir a saída dele recebe do programa. O programa em si não é afetado e continua a ser executado em segundo plano, apenas a saída não é "enviada" ao usuário até que um XON
seja recebido novamente.
Se você escreve um programa e deseja receber explicitamente esses caracteres de entrada, você pode usar a tcsetattr()
chamada do sistema em seu programa para desabilitar o controle de fluxo de software através do IXOFF
sinalizador (vejaaqui, por exemplo) -nano
faz isso, por exemplo.
Responder2
htop
para de atualizar a exibição, o que é bom saber, mashtop
ainda está em execução [depois que Ctrl-S foi inserido]?
Sim absolutamente. htop
ou outro comando NÃO é interrompido ou congelado pelo Ctrl-S.
A IXON
configuração termios não funciona como ISIG
. Digitar os caracteres VSTOP
(Ctrl-S) ou VSTART
(Ctrl-Q) NÃO envia nenhum sinal ao processo em execução no terminal.
É muito fácil verificar isso; abra dois terminais: no primeiro entre
tail -f /tmp/file
e no segundo
cat > /tmp/file
Agora, no segundo terminal, digite Ctrl-S e continue digitando cegamente as linhas seguidas de Enter. Eles aparecerão na tela do primeiro terminal. Se, em vez disso, cat
for um shell e esses comandos forem como rm ...
, eles serão executados sem a necessidade de serem repetidos na tela.
o que geralmente acontece em qualquer comando que recebe um XOFF.
O comando não "recebe um XOFF". Tudo é tratado dentro do driver do terminal. Do ponto de vista da aplicação nada acontece. Se o programa continuar enviando saída abundante (ou a ECHO
configuração termios estiver ativada --o padrão-- e continuar recebendo entrada abundante), qualquer gravação (ou respectiva leitura) no terminal será, em algum momento, bloqueada até que Ctrl-Q seja recebido.