Efeito de Ctrl-S / XOFF no processo

Sep 23 2020

Enquanto estava executando apt upgrade, enviei acidentalmente um Ctrl- Spara aquela janela de terminal.

Agora sei XOFF, XON, Ctrl- Q, e 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 em apt, ou o que acontece geralmente em qualquer comando que recebe um XOFF. htoppára de atualizar o display, o que é bom saber, mas htopainda está em execução?

aptAinda estava correndo? Ou foi apte htopefetivamente pausado, congelado?

Aparentemente, os processos ainda podem receber entrada, enquanto XOFF'd, portanto, ainda estão em execução.

O que está acontecendo? Por exemplo, o contador do programa, aparentemente, ele simplesmente não para de incrementar o contador do programa, congelando o programa.

Depende de como o comando está programado para lidar com XOFF? Existe um comportamento geral que pode ser esperado com os comandos básicos do Linux?

Respostas

1 user414777 Sep 23 2020 at 21:01

htoppára 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 para o processo em execução no terminal.

É muito fácil verificar isso; abrir dois terminais: no primeiro digite

tail -f /tmp/file

e no segundo

cat > /tmp/file

Agora, no segundo terminal, digite Ctrl-S e continue digitando às cegas as linhas seguidas de Enter. Eles aparecerão na tela do primeiro terminal. Se em vez de catser um shell e esses forem comandos semelhantes rm ..., eles serão executados sem ter que ser repetidos de volta na tela.

o que acontece geralmente em qualquer comando que receba um XOFF.

O comando não "recebe um XOFF". Tudo é tratado dentro do driver do terminal. Do ponto de vista do aplicativo, nada acontece. Se o programa continua enviando saída copiosa (ou a ECHOconfiguração termios está ativada - o padrão-- e continua recebendo entrada copiosa), qualquer gravação (ou respectiva leitura) para o terminal irá em algum ponto bloquear até que Ctrl-Q seja recebido.

1 AdminBee Sep 23 2020 at 19:17

Como você já deve saber, XONe XOFF, vinculados a Ctrl+ Se Ctrl+ Qpor padrão, são caracteres de controle de fluxo de software e, em princípio, relíquias dos velhos tempos dos terminais de teletipo de 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 não são mais usados, mas a ideia por trás deles ainda é retida no framework do software de um "terminal" (veja, por exemplo, aqui e este artigo muito bom sobre a história do TTY ), que herdou e ainda implementa alguns dos os conceitos usados ​​nos terminais originais em papel - sendo um deles a capacidade de interpretar caracteres de controle de fluxo.

Normalmente, um programa em execução "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 de outra forma e continua a ser executado em segundo plano, apenas a saída não é "enviada" para o usuário até que um XONseja recebido novamente.

Se você escreve um programa e deseja receber explicitamente esses caracteres de entrada, pode usar a tcsetattr()chamada do sistema em seu programa para desabilitar o controle de fluxo do software por meio do IXOFFsinalizador (veja aqui, por exemplo ) - nanofaz isso , por exemplo.