Muitas vezes, acidentalmente, executo o cat
comando em arquivos com conteúdo de até alguns milhares de linhas.
Eu tento matar o cat
comando com Ctrl+ Cou Ctrl+ Z, mas ambos só entram em vigor após a saída total de cat
ser exibida no terminal, então tenho que esperar até que cat
seja completamente executado.
Existe uma solução melhor que evite esperar? Porque, às vezes, os arquivos têm tamanho de 100 MB e é irritante esperar por isso.
Eu estou usando tcsh
.
curiosity
comando ...alias curiosity='sudo killall cat'
Respostas:
Se o (s) arquivo (s) em questão contiver realmente muitos dados que o envio do sinal pode realmente chegar
cat
antes de terminar. O que você realmente observa é a velocidade finita do seu terminal -cat
envia os dados para o terminal e leva algum tempo para o terminal exibir tudo.Lembre-se de que, geralmente, é necessário redesenhar toda a janela de saída para cada linha de saída (ou seja, mover o conteúdo da janela uma linha para cima e imprimir a próxima linha na parte inferior). Embora existam técnicas e algoritmos para tornar isso mais rápido do que se tivesse sido feito da maneira direta, ainda leva algum tempo.
Portanto, se você deseja se livrar da saída o mais rápido possível, oculte a janela do terminal , pois normalmente não ocorre um redesenho real. No ambiente gráfico, isso pode significar minimizar a janela ou alternar para um desktop virtual diferente; no console virtual do Linux, basta alternar para outro (( Ctrl+) Alt+ ).Fx
Observe também que, se você executasse isso em um link de rede lento (SSH em uma conexão GSM, por exemplo), definitivamente veria muito menos saída antes de
cat
ser morto pelo sinal, porque a velocidade do terminal não seria mais o gargalo. .fonte
~?
para ver as opções disponíveis (~.
fecha).tty-stop-output
. Você pode então enviar Ctrl + C. Para retomar a saída, pressione Ctrl + Q ...Configuração do Terminal
Eu acho que isso tem mais a ver com a maneira como o terminal é configurado, do que com qualquer problema de buffer. Verifique a saída de
stty -a | grep intr
, você deve terintr = ^C;
na linha de saída se Ctrl- Cestiver ativado notty
/pty
. Caso contrário, você podestty intr ^C
habilitá-lo. Adicione a linha ao seu.tcshrc
ou.login
para torná-lo permanente (ou exclua a linha que a altera em primeiro lugar!).Se falhar Ctrl- C, você também pode tentar enviar
SIGQUIT
com Ctrl- \. Se isso não funcionar, verifique novamentestty -a | grep quit
se está configurado corretamente.Configuração do emulador de terminal
Verifique também as configurações do seu emulador de terminal (se você estiver usando um), pode ser que haja um atalho configurado nesse nível (talvez para cópia ou algo assim) e o Ctrl- Cnão atinja o
pty
nível. Um atalho também pode ser configurado em outro lugar no ambiente de área de trabalho ou no sistema Windows.Um bom teste no Linux se você estiver usando um emulador de terminal é alternar para um console Linux ( Ctrl- Alt- F1), faça o login lá e veja se o mesmo comportamento ocorre. Caso contrário, isso sugere que o problema está no seu sistema Windows ou emulador de terminal.
Pode ser um problema com o atraso entre os dados que estão sendo lidos no
pty
dispositivo, conforme sugerido por peterph . Mas se este é o caso e você tem que realmente esperar minutos para os dados a serem exibidos, então certamente o emulador de terminal é tamponamento maneira demasiados dados (ou o seu PC é muito lento). A resposta seria encontrar uma maneira de reduzir esse tamanho de buffer nas configurações do emulador de terminal ou usar outra.Dica Extra
Algo mais que vale a pena acrescentar; Normalmente, acabo na
cat
situação de fuga quando, acidentalmente,cat
um arquivo binário. O outro efeito disso pode ser alterar as configurações do terminal (se os dados binários coincidirem com vários códigos de escape do terminal, o que geralmente ocorre). Setput
estiver instalado (normalmente é por padrão), você pode evitar ter que reiniciar com o seguinte comando:fonte
É para isso que
tmux
opçãoc0-change-interval
ec0-change-trigger
projetada. Você deve usar um gerenciador de tela para uma sessão recuperável de qualquer maneira.fonte
A opção Ctrl- Oestá no Unix desde os 110 dias de transmissão. Os comandos fugitivos do gato sempre foram um problema quando um arquivo ASCII longo era despejado no dispositivo de saída lento e o arquivo inteiro era colocado no buffer de saída do driver de dispositivo. Ctrl- Oiniciaria a descarga do buffer e um acompanhamento Ctrl- Oalternaria a descarga para que o gato pudesse ser lido na velocidade normal. Ctrl- Ofoi inserido e o arquivo inteiro descarregou e retornou rapidamente um prompt de comando.
Ainda não se sabe se os codificadores do driver de dispositivo Linux sentiram a necessidade de continuar adicionando esse recurso. Esse recurso foi adicionado no nível do driver de dispositivo, onde Ctrl- Se Ctrl- Qsó podiam ser implementados. Usei isso para despejar grandes execuções de depuração com muitas impressões de cheques e, em seguida, role para baixo até o local que eu precisava ver.
fonte
Ao usar o bash, você pode suspender o trabalho usando Ctrl+ Ze depois matá-lo, usando o PID ou seguindo as respostas de https://stackoverflow.com/questions/1624691/linux-kill-background-task (por exemplo, kill -9 %%)
fonte
tcsh
e Ctrl + Z não está funcionando ... já afirmou isso em questão.abra um novo console, por exemplo, clicando no ícone do console ou pressionando Ctrl+ Alt+ F2. Lá, entre
e o gato será morto, a menos que você tenha um bloqueio NFS antigo ou uma situação de "suspensão ininterrupta" (leia em um setor incorreto sem tempo limite definido).
fonte
cat
-se do quecat
foi gravado no terminal antes de morrer e ainda não foi lido, processado ou exibido pelo emulador de terminal (e está instalado em um buffer (cerca de 64kB de tamanho grande no Linux) dentro do driver pty) .drop_caches
controla as páginas usadas como cache pelo kernel (geralmente para um sistema de arquivos), não os buffers internos de terminais, drivers de rede e outros - se o fizesse, teria conseqüências bastante graves, como Stéphane apontou (basicamente você perderia dados) .killall -9 cat
também não mataria outras instâncias de gato que ainda possam estar fazendo coisas boas em outros threads de processo?Você pode tentar com isso
Redefinir o uso da tela -ctrlj
Se o gato ainda estiver em execução, abra um novo terminal e execute
pkill -9 -f cat
"Isso matará todos os processos do gato".fonte
pkill -f cat
na minha área de trabalho, a área da bandeja do sistema da barra de tarefas do Xfce4 mataria.