Eu tenho um longo dd
processo em execução em um sistema Debian a partir do console local.
Sei que posso enviar USER1 ou CTRL+Tno console local, mas o meu único meio é monitorá-lo por enquanto ssh
. Infelizmente, o Google foi inútil aqui.
Existe uma maneira simples de monitorar seu progresso remotamente sem interromper a tarefa atual?
kill -USR1
não precisa ser executada em um terminal local, apenas precisa ser executável com as permissões corretas (ou seja, você pode precisarsudo kill
) .. isso não funcionou ou você não pode abrir uma segunda instância SSH para monitorar?kill -INFO $(pgrep ^dd$)
em sistemas BSD (como o OSX). porque dessa maneira interrompe o dd no OSX. de dois comentários desse post para usuários do BSD ...ssh
? Algo comossh 'kill -USR1 $(pgrep ^dd)'
? Obviamente, somente quando você souber quekill -usr1
isso não interromperá a execução do seu comando.Respostas:
Agora que o
dd
comando long está em execução, é tarde para redirecionar sua saída. Talvez você esteja longe do console e não possa usarscreen
ou criar um FIFO para seu stderr ...... mas você ainda pode usar duas sessões ssh e
strace
!Na primeira sessão ssh você pode escrever
No segundo lugar ( leia a nota de aviso abaixo para o sinal usar
-SIGUSR1
ouSIGINFO
)E leia uma saída não tão agradável da primeira semelhante à abaixo
Nota: Infelizmente (mesmo que relatado de maneira diferente), o comando
kill -USR1 $(pgrep ^dd)
forçará osdd
processos em execução a gravar no stderr original . Para isso, foi necessário modificar a resposta original (você pode ver no histórico da versão).Aviso: Conforme relatado nesta outra resposta, o sinal para enviar com kill em vez de
-USR1
pode depender da distribuição Linux. No OpenBSD-SIGINFO
no UbuntuSIGUSR1
. Verifique cuidadosamente com antecedência que alguém errado pode encerrar o processo!fonte
screen
-lo e recuperá -lo com o ssh. Caso-usr1
contrário, desde que li que "faz com que as estatísticas de E / S sejam impressas com erro padrão" , você pode usar um Named Pipe para redirecionar o stderr do seu comando e ler a partir dele quando desejar e depois enviar o-usr1
sinal.Com
pv
pv
pode assistir outro processo. A parte relevante deman 1 pv
:Existem restrições, porém:
dd
estiver no meio de um pipeline,pv -d
não assistirá ao stdin ou stdout. Barra de progresso não faz sentido, neste caso, você ainda pode querer ver a taxa de transferência. Mas mesmo se você especificar explicitamentePID:0
ouPID:1
, isso não funcionará.A vantagem é que essa abordagem é totalmente não intrusiva. Não deve afetar a corrida de
dd
forma alguma.Com
reptyr
Outra abordagem é com
reptyr
; veja esta resposta minha .Inicie
screen
outmux
usereptyr
para conectar a corridadd
ao novo terminal. Se isso der certo, você poderá verdd
a reação dos sinais no novo terminal. Desconecte descreen
/tmux
e reconecte se necessário.Notas:
dd
A reação dos sinais não aparecerá mais no terminal antigo.reptyr
redirecionará os descritores de arquivos relevantes e alterará o terminal de controle dedd
; então isso é intrusivo de certa forma. Meu conselho é tentar fazer isso com um " macaco arranhadodd
" primeiro.dd
em um pipeline)reptyr
não é possível conectar. Entãoreptyr -T
pode funcionar, mas afetará outros processos, não apenasdd
. Por favor, vejaman 1 reptyr
para detalhes.fonte