A biblioteca de E / S padrão ("stdio") do Unix detecta que tipo de coisa (coletor de dados) ela está gravando. Se detectar um terminal (por exemplo, uma janela), ele gravará dados imediatamente quando o programa os solicitar. Ao gravar em um arquivo, no entanto, a biblioteca de E / S armazena dados em buffer e os grava em blocos de 512 (ou mais) bytes por vez. É claro que ele libera o buffer (escrevendo um bloqueio parcial) quando o programa de chamada é encerrado - se ele sair de forma limpa. Um término anormal (como causado por
Ctrl +
C ) pode deixar você com um arquivo de saída incompleto.
Para corrigir, tente:
top -b | ( trap "" 2; nawk '
(your nawk
command)'
> output.log)
'
O comando trap
tornará o comando nawk
imune ao Ctrl + C . (É claro que a Ctrl + C ainda irá matar o processo top
, e nawk
terminará (limpa!) Quando receber um fim de arquivo (EOF) no tubo.
P.S. Isso pressupõe (requer) que você esteja executando bash
ou um shell compatível com bash
.