¿Es posible verificar el progreso de la ejecución del proceso de cp? Algunos procesos responden a varias señales de KILL para que pueda verificar cuál es su estado. Sé que puedo ejecutar cp con el parámetro -v, pero qué pasa si olvido hacerlo, cp se ejecuta durante mucho tiempo y quiero saber qué archivo se está copiando o cuántos ya se copiaron.
54
while sleep 1 ; do sync ; done
.Respuestas:
Sí, al ejecutar stat en el archivo de destino y el archivo local, y obtener un tamaño de archivo,
es decir
stat -c "%s" /bin/ls
Y obtienes el porcentaje de datos copiados al comparar los dos valores, eso es todo
En una implementación muy básica que se verá así:
fuente
En las versiones recientes de Mac OS X, puede presionar CTRL+ Tpara ver el progreso. Desde la página de manual de OSX 10.6 para cp (1) :
Golpear CTRL+ Tes equivalente a señalar el proceso actual con SIGINFO en máquinas BSD-ish, incluido OSX.
Esto funciona para dd (1) también.
No creo que Linux tenga este mecanismo SIGINFO, y no veo nada en la página de manual de GNU para cp (1) sobre las señales que se pueden usar para informar el progreso.
fuente
mv
está vivo. ¡Gracias!Cuando está copiando muchos archivos,
du -s /path/to/destination
ofind /path/to/destination | wc -l
le da una idea de cuánto se ha hecho.Puede averiguar qué archivo se está copiando
lsof -p1234
donde 1234 es la ID del procesocp
. En muchos sistemas,pgrep -x cp
informa los ID de proceso de todos los procesos en ejecución nombradoscp
. Esto puede no ser muy útil ya que el orden en que se copian los archivos dentro de un directorio dado es esencialmente impredecible (en un directorio grande en Linux,ls --sort=none
se lo dirá; con un árbol de directorios, intentefind
).lsof -p1234
también le dice cuántos bytescp
ya ha leído y escrito para el archivo actual, en laOFFSET
columna.En Linux, hay estadísticas de uso de E / S en
/proc/$pid/io
(nuevamente, use el PID delcp
proceso para$pidf
). Elrchar
valor es el número total de bytes que el proceso ha leído, ywchar
es el número de bytes que el proceso ha escrito. Esto incluye no solo datos en archivos sino también metadatos en directorios. Puede comparar esa cifra con la cifra aproximada obtenida condu /path/to/source
(que solo cuenta los datos del archivo).read_bytes
ywrite_bytes
solo incluye lo que se ha leído o escrito del almacenamiento, es decir, excluye el diagnóstico del terminal y los datos que ya están en la memoria caché o que todavía están en las memorias intermedias.fuente
watch lsof -p1234
watch lsof -p`pgrep -x cp`
Una herramienta relativamente nueva que hace exactamente eso es el progreso (anteriormente cv [coreutils viewer]).
¿Qué es?
¿Como funciona?
fuente
Uno de mis trucos favoritos para esto (en Linux) es encontrar el PID del
cp
proceso (usandops | grep cp
o similar), y luego buscar/proc/$PID/fd/
y/proc/$PID/fdinfo/
.Esto le mostrará qué archivos ha abierto el proceso. Si quieres ver qué tan lejos del proceso está el archivo ...
El
pos
parámetro es la posición del puntero de lectura (o escritura), en bytes.fuente
Hay algunas cosas que puedes hacer. Puede adjuntarlo
strace
para ver qué está haciendo (¡la salida puede ser copiosa!):o podría
lsof
decirle qué archivos tiene abiertos actualmente:Si está ejecutando un gran recursivo
cp
, puede usarlopwdx
para obtener el directorio de trabajo actual, que puede darle una idea de cómo está funcionando:fuente
Si bien el OP ha mencionado específicamente la capacidad de ver cómo progresa el comando "cp", hay que decir que otras utilidades son mejores para este problema en particular.
Por ejemplo:
mostrará el progreso de copiar el archivo / carpeta FROM al archivo / FOLDER TO.
Y rsync le dirá cuánto se copia (y la velocidad de transferencia) en el camino. Funciona para archivos o carpetas individuales en la misma máquina o en la red.
fuente
rsync
.Lo que puede hacer es verificar los archivos en el destino.
Si sus comandos cp son similares
cp -a <my_source> <my_dest_folder>
, verificaría en qué archivos ya están copiados<my_dest_folder>
y cada tamaño de archivo, para que pueda ver el progreso. Si el<my_source>
es un poco complejo (varias capas de directorios), entonces un pequeño script podría verificar el estado. Aunque dicho script podría consumir un poco de E / S que elcp
proceso no utilizaría .fuente
Esta herramienta es un comando de utilidad de Linux que busca los comandos básicos de coreutils (cp, mv, dd, tar, gzip / gunzip, cat, etc.) que se ejecutan actualmente en su sistema y muestra el porcentaje de datos copiados:
https://github.com/Xfennec/cv
fuente
Me gustaría agregar
cpv
un pequeño contenedor parapv
eso que escribí que imita el uso decp
.Simple y útil
Puedes conseguirlo aquí
fuente
También puede usar pipeviewer .
fuente
Uso
pv -d
:( fuente )
Descubra el PID de su ejecución
cp
(pidof cp
), digamos que es 12345; entonces simplementeNotas:
pv
como el mismo usuario que ejecutacp
(o como root).cp
está procesando archivos pequeños en este momento, probablemente no los verá a todos en la salida (un archivo pequeño puede cerrarse demasiado rápido para quepv
pueda recogerlo). Sin embargo, aparecerán algunos, así que incluso entonces podrás decir quécp
hace.pv -d "$(pidof cp)"
podría funcionar; pero si hay más de unocp
corriendo, no funcionará. Hay unopidof -s
que devuelve como máximo un PID, pero no puede estar seguro de que pertenecerá alcp
proceso correcto si hay muchos.fuente
Puede enviar una señal al proceso:
Es aún más útil crear un script que sondee hasta que presione Ctrl-C o el proceso finalice:
Funciona para dd. No funciona para cp . Quizás tengas que usar otra señal. Una vez probé SIGINFO, pero ya no parece existir en la plataforma Intel.
fuente