É possível verificar o andamento da execução do processo cp? Alguns processos respondem a vários sinais KILL para que você possa verificar qual é o status deles. Eu sei que posso executar o cp com o parâmetro -v, mas e se se esquecesse disso, o cp está em execução há muito tempo e quero saber qual arquivo está sendo copiado ou quantos já foram copiados.
54
while sleep 1 ; do sync ; done
.Respostas:
Sim, executando stat no arquivo de destino e no arquivo local e obtenha um tamanho de arquivo,
ie
stat -c "%s" /bin/ls
E você obtém a porcentagem de dados copiados comparando os dois valores, é isso
Em uma implementação muito básica, será assim:
fonte
Nas versões recentes do Mac OS X, basta clicar em CTRL+ Tpara ver o progresso. Na página do manual OSX 10.6 para cp (1) :
Bater CTRL+ Té equivalente a sinalizar o processo atual com o SIGINFO em máquinas BSD-ish, incluindo OSX.
Isso funciona para o dd (1) também.
Eu não acho que o Linux tenha esse mecanismo SIGINFO, e não vejo nada na página de manual do GNU do cp (1) sobre sinais que podem ser usados para relatar o progresso.
fonte
mv
vivo. Obrigado!Quando você está copiando muitos arquivos
du -s /path/to/destination
oufind /path/to/destination | wc -l
dá uma idéia de quanto já foi feito.Você pode descobrir para qual arquivo está sendo copiado
lsof -p1234
onde 1234 é o ID do processocp
. Em muitos sistemas,pgrep -x cp
relata os IDs de todos os processos em execução nomeadoscp
. Isso pode não ser muito útil, pois a ordem na qual os arquivos em um determinado diretório são copiados é essencialmente imprevisível (em um diretório grande no Linux,ls --sort=none
será informado ; com uma árvore de diretórios, tentefind
).lsof -p1234
também informa quantos bytescp
já foram lidos e gravados para o arquivo atual, naOFFSET
colunaNo Linux, há estatísticas de uso de E / S em
/proc/$pid/io
(novamente, use o PID docp
processo para$pidf
). Orchar
valor é o número total de bytes que o processo leu ewchar
é o número de bytes que o processo gravou. Isso inclui não apenas dados nos arquivos, mas também metadados nos diretórios. Você pode comparar essa figura com a figura aproximada obtida comdu /path/to/source
(que conta apenas os dados do arquivo).read_bytes
ewrite_bytes
inclua apenas o que foi lido ou gravado no armazenamento, ou seja, ele exclui os diagnósticos e os dados do terminal que já estão no cache ou ainda nos buffers.fonte
watch lsof -p1234
watch lsof -p`pgrep -x cp`
Uma ferramenta relativamente nova que faz exatamente isso é progresso (anteriormente cv [coreutils viewer]).
O que é isso?
Como funciona?
fonte
Um dos meus truques favoritos para isso (no Linux) é descobrir o PID do
cp
processo (usandops | grep cp
ou similar) e depois procurar/proc/$PID/fd/
e/proc/$PID/fdinfo/
.Isso mostrará quais arquivos o processo abriu. Se você deseja ver a que distância do arquivo está o processo ...
o
pos
parâmetro é a posição do ponteiro de leitura (ou gravação), em bytes.fonte
Há algumas coisas que você pode fazer. Você pode anexá
strace
-lo para ver o que está fazendo (a saída pode ser abundante!):ou você pode
lsof
dizer quais arquivos ele abriu no momento:Se você estiver executando uma grande recursiva
cp
, poderápwdx
obter o diretório de trabalho atual, o que pode lhe dar uma idéia de como está:fonte
Embora o OP tenha mencionado especificamente a capacidade de ver como o comando "cp" está progredindo, é preciso dizer que outros utilitários são melhores para esse problema em particular.
Por exemplo:
mostrará o progresso da cópia do arquivo / pasta FROM para o arquivo TO / FOLDER.
E o rsync lhe dirá quanto é copiado (e a taxa de transferência) ao longo do caminho. Ele funciona para arquivos ou pastas únicos na mesma máquina ou na rede.
fonte
rsync
.O que você pode fazer é verificar os arquivos no destino.
Se seus comandos cp forem algo como
cp -a <my_source> <my_dest_folder>
eu verificaria quais arquivos já foram copiados<my_dest_folder>
e cada tamanho de arquivo, para que eu possa ver o progresso. Se<my_source>
for um pouco complexo (várias camadas de diretórios), um pequeno script poderá verificar o status. Embora esse script possa consumir um pouco de E / S que não seria usado pelocp
processo.fonte
Essa ferramenta é um comando do utilitário Linux que procura os comandos básicos do coreutils (cp, mv, dd, tar, gzip / gunzip, cat etc.) atualmente em execução no sistema e exibe a porcentagem de dados copiados:
https://github.com/Xfennec/cv
fonte
Gostaria de acrescentar
cpv
um pequeno invólucro para opv
que escrevi que imita o uso decp
.Simples e útil
Você pode obtê-lo aqui
fonte
Você também pode usar o pipeviewer .
fonte
Use
pv -d
:( fonte )
Descubra o PID da sua execução
cp
(pidof cp
), digamos que seja 12345; então simplesmenteNotas:
pv
como o mesmo usuário que executacp
(ou como root).cp
estiver processando arquivos pequenos no momento, provavelmente você não os verá na saída (um arquivo pequeno pode ser fechado muito rápido parapv
buscá-lo). No entanto, alguns aparecerão, e mesmo assim você será capaz de dizer o quecp
faz.pv -d "$(pidof cp)"
pode funcionar; mas se houver mais de umacp
execução, não funcionará. Existe opidof -s
que retorna no máximo um PID, mas você não pode ter certeza de que ele pertencerá aocp
processo correto , se houver muitos.fonte
Você pode enviar um sinal para o processo:
É ainda mais útil criar um script que pesquise até você pressionar Ctrl-C ou o processo terminar:
Trabalhos para dd. Não funciona para cp . Talvez você precise usar outro sinal. Uma vez tentei o SIGINFO, mas ele parece não existir mais na plataforma Intel.
fonte