dd if=/dev/zero of=/dev/null&
O trailing & significa executar o comando prefix em segundo plano. (Aviso: Esta é uma declaração simplista)
Consulte este :
$! is the PID of the most recent background command.
Portanto, pid=$! atribui o PID de plano de fundo mais recente à variável pid, que é dd PID.
Also why they use sleep and kill?.
Você precisa de kill $pid (se não for especificado o parâmetro, o sinal padrão para kill é TERM que é a finalização do processo) para finalizar o processo dd após o teste, caso contrário o processo dd apenas fique em segundo plano e exaure seus recursos de CPU. Verifique o seu monitor de sistema da sua plataforma para ver.
Considerando que Kill -USR1 $pid imprime estatísticas de E / S, não encerra o processo.
Sem dormir por 1 segundo, seu processo dd pode ser finalizado pela última instrução de comando kill $pid ** antes de ter a chance de gravar a saída de estatísticas em seu terminal. Os processos são síncronos, mas trap + operação de gravação ( kill -USR1 $pid ) pode ser mais lenta que finalizar operação ( kill $pid ). Então, sleep 1 segundo para atrasar a inicialização de kill $pid para garantir a impressão da saída de estatísticas.
This is the way to use -USR1?
Apenas man dd :
Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
e man 7 signal :
SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2
Combine as duas instruções, você deve entender que USR1 é Sinal definido pelo usuário definido por dd para fornecer uma maneira de o usuário interrompê-lo e imprimir estatísticas de E / S na mosca. É um manipulador específico do programa, isso não significa que você pode kill -USR1 other_program_pid e esperar resultados de estatísticas.
Você também pode se interessar por esta: Por que o SIGUSR1 causa processo a ser finalizado? .