Efeito de Ctrl-S/XOFF no processo

Efeito de Ctrl-S/XOFF no processo

Enquanto estava correndo, apt upgradeenviei 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", aptcontinuei com seu trabalho.

Ao ler sobre XOFF, não está claro para mim o que aconteceu aptou o que acontece geralmente em qualquer comando que recebe um arquivo XOFF. htoppara de atualizar o display, o que é bom saber, mas htopainda está funcionando?

Ainda estava aptcorrendo? Ou foi apte htopefetivamente 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 aptcontinuou a funcionar silenciosamente ou se foi congelado/pausado.

Responder1

Como você já deve saber, XONe 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 XONe XOFFporque 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 XONseja 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 IXOFFsinalizador (vejaaqui, por exemplo) -nanofaz isso, por exemplo.

Responder2

htoppara de atualizar a exibição, o que é bom saber, mas htopainda está em execução [depois que Ctrl-S foi inserido]?

Sim absolutamente. htopou outro comando NÃO é interrompido ou congelado pelo Ctrl-S.

A IXONconfiguraçã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, catfor 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 ECHOconfiguraçã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.

informação relacionada