Para alguns IPs, ping -c 4 -W 1 ip | cat não produz nada até que o ping termine, enquanto para outros

3

Por que

$ ping -c 4 -W 1 127.0.0.1 | cat

e

$ ping -c 4 -W 1 1.1.1.1

imprima sua saída imediatamente, enquanto

$ ping -c 4 -W 1 1.1.1.1 | cat

imprime nada por quatro segundos e imprime todas as saídas de uma só vez?

N.B. o primeiro comando imprime pings bem sucedidos, os outros dois tempos limite de impressão, como esperado.

    
por rightfold 04.01.2015 / 17:07

3 respostas

4

No caso em que ping está saindo para um pipeline de shell, o comportamento diferente é explicado pelo buffer. ping chama fflush () depois de relatar cada pacote de eco recebido com sucesso, então essas linhas são enviadas imediatamente para o cat, que as envia sem atraso. ping faz não chamar fflush () depois de escrever as linhas que reportam os pacotes expirados, então stdio armazena essas linhas até que ping chame exit (), que então envia todos para cat, que os envia. / p>

No caso em que o ping está saindo diretamente para o terminal, você vê a saída de sucesso e falha imediatamente porque, por padrão, a linha stdio armazena em buffer toda a saída para fluxos associados a ttys. Assim, cada linha de saída é enviada para o terminal imediatamente, em vez de ser armazenada em buffer pelo stdio.

No espírito do ensinar um homem a pescar , você pode verificar tudo isso sozinho lendo o código-fonte do ping e lendo o sistema operacional X página man do stdio .

    
por 04.01.2015 / 20:46
0

Eu acredito que isso é por causa de como o gato está recebendo a entrada, o primeiro comando dá um status de saída de 2, enquanto o endereço IP que está ping dá um status de saída de 0.

Isto significa que cat está exibindo a saída de STDOUT imediatamente enquanto está colocando STDERR em seu buffer e então exibindo-o no final do comando.

    
por 04.01.2015 / 18:18
0

Ele está aguardando por DNS ou por pacotes de resposta de eco ICMP. Se for DNS, tente a opção -n . Se não estiver, tente a diferença entre os hosts que respondem às solicitações de eco do ICMP e aqueles que não o fazem (ou cujas respostas são filtradas em algum lugar no caminho).

    
por 04.01.2015 / 21:34

Tags