Como o dd só produz quando eu pressiono Ctl + t? [duplicado]

0

Isso é com o OSX. Quando eu corro isso em um terminal

scottcarlson$ sudo dd if=Downloads/CentOS-7-x86_64-Everything-1511.iso of=/dev/disk2 2> Desktop/out.txt

e depois isso em outro

tail -f Desktop/out.txt

ele apenas atualiza o log quando eu pressionar Ctl t no primeiro terminal com o dd . Isso é por causa da natureza de dd ?

Eu não sei exatamente como ele grava em dispositivos, mas seria muito exigente para o processo fazer uma pausa e gravar no log?

    
por scarlso9 23.07.2016 / 02:57

4 respostas

0

It only updates the log when I press Ctlt in the first terminal with the dd. Is this because of the nature of dd?

Sim. É da natureza de dd emitir seu status atual quando recebe um determinado sinal. Na maioria dos sistemas operacionais, esse sinal é SIGUSR1 , um sinal padrão, mas no OS X ele usa para o mesmo sinal não padrão chamado SIGINFO . Além disso, o OS X possui uma configuração de driver tty que permite enviar esse sinal específico com uma combinação de teclas, Ctrl T , assim como Ctrl C envia SIGQUIT em todos os sistemas operacionais.

I don't know exactly how it writes to devices, but could it be too demanding for the process to take a break and write to the log?

Você está precisamente pedindo para fazer isso com o atalho. Se você quiser ter atualizações automáticas regulares, nada o proíbe de fazer um simples loop de shell como esse:

while kill -INFO $(pgrep dd); do sleep 5; done

Isso pressupõe que pgrep esteja disponível no OS X. Caso contrário, escolha o comando pid do seu dd e use-o como kill second argument.

    
por 23.07.2016 / 04:11
1

O que você está vendo com ctl t é um resumo das informações do processo em execução, não a saída de dd .

dd não produz informações de progresso, diferentemente do que você parece esperar.

Se você quiser ver o progresso real de outra janela de terminal, observe o tamanho do arquivo de saída mudando. Neste caso você está escrevendo para um disco bruto, então paciência é provavelmente sua melhor amiga aqui.

    
por 23.07.2016 / 03:08
0

No OS-X, se você executar stty -a , verá que ^T é a combinação de chaves para status

% stty -a | grep '\^T'
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;

De man dd

 If dd receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output block counts will be written to the standard
 error output in the same format as the standard completion message.  If

Os dois juntos significam que, enquanto dd estiver em execução, acertar ^T fará com que uma exibição de resumo seja gravada.

    
por 23.07.2016 / 04:02
-1

Você pode enviar o sinal SIGUSR1 para dd, o que fará com que ele gere seu progresso atual para stderr, permitindo que você visualize a saída.

kill -SIGUSR1 $(pgrep dd) 

Editar: conforme indicado abaixo, no OSX você precisaria enviar o sinal INFO, pois USR1 é somente para Linux.

    
por 23.07.2016 / 03:38