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? .