Est-il possible de vérifier la progression de l'exécution du processus cp? Certains processus répondent à divers signaux KILL afin que vous puissiez vérifier leur statut. Je sais que je peux exécuter cp avec le paramètre -v, mais si j'oublie de le faire, cp fonctionne depuis très longtemps et je veux savoir quel fichier est copié ou combien ont déjà été copiés.
54
while sleep 1 ; do sync ; done
.Réponses:
Oui, en exécutant stat sur le fichier cible et le fichier local, et obtenir une taille de fichier,
c'est à dire
stat -c "%s" /bin/ls
Et vous obtenez le pourcentage de données copiées en comparant les deux valeurs, c'est tout
Dans une implémentation très basique qui ressemblera à ceci:
la source
Sur les versions récentes de Mac OS X, vous pouvez simplement appuyer sur CTRL+ Tpour voir les progrès. Depuis la page de manuel OSX 10.6 pour cp (1) :
Frapper CTRL+ Téquivaut à signaler le processus en cours avec SIGINFO sur des machines BSD, y compris OSX.
Cela fonctionne aussi pour dd (1) .
Je ne pense pas que Linux ait ce mécanisme SIGINFO et ne voit rien dans la page de manuel GNU de cp (1) concernant les signaux pouvant être utilisés pour rendre compte des progrès.
la source
mv
vie est en vie. Merci!Lorsque vous copiez beaucoup de fichiers
du -s /path/to/destination
oufind /path/to/destination | wc -l
vous donne une idée de ce qui a déjà été fait.Vous pouvez trouver le fichier en cours de copie avec
lsof -p1234
1234 l'identifiant de processus decp
. Sous de nombreux systèmes,pgrep -x cp
indique les ID de processus de tous les processus en cours nomméscp
. Cela peut ne pas être très utile car l'ordre dans lequel les fichiers d'un répertoire donné sont copiés est essentiellement imprévisible (dans un grand répertoire sous Linux,ls --sort=none
vous le saurez; avec une arborescence de répertoires, essayezfind
).lsof -p1234
vous indique également combien d’octetscp
ont déjà été lus et écrits pour le fichier en cours, dans laOFFSET
colonne.Sous Linux, il existe des statistiques d'utilisation d'E / S dans
/proc/$pid/io
(encore une fois, utilisez le PID ducp
processus pour$pidf
). Larchar
valeur correspond au nombre total d'octets lus par le processus etwchar
au nombre d'octets écrits par le processus. Cela inclut non seulement les données dans les fichiers, mais également les métadonnées dans les répertoires. Vous pouvez comparer ce chiffre avec le chiffre approximatif obtenu avecdu /path/to/source
(qui ne compte que les données du fichier).read_bytes
etwrite_bytes
n'inclut que ce qui a été lu ou écrit à partir de la mémoire, c'est-à-dire qu'il exclut les diagnostics de terminal et les données déjà en cache ou encore dans les mémoires tampons.la source
watch lsof -p1234
watch lsof -p`pgrep -x cp`
Un outil relativement nouveau qui fait exactement cela est le progrès (anciennement cv [coreutils viewer]).
Qu'Est-ce que c'est?
Comment ça marche?
la source
L’un de mes trucs préférés pour cela (sous Linux) est de trouver le PID du
cp
processus (usingps | grep cp
ou similaire), puis de regarder dedans/proc/$PID/fd/
et/proc/$PID/fdinfo/
.Cela vous montrera quels fichiers le processus a ouverts. Si vous voulez voir à quelle distance du fichier se trouve le processus ...
le
pos
paramètre est la position du pointeur de lecture (ou d'écriture), en octets.la source
Il y a quelques choses que vous pouvez faire. Vous pouvez y joindre
strace
pour voir ce qu'il fait (la sortie peut être copieuse!):ou vous pourriez arriver
lsof
à vous dire quels fichiers il a actuellement ouvert:Si vous exécutez une grosse opération récursive
cp
, vous pouvez utiliserpwdx
le répertoire de travail actuel, ce qui peut vous donner une idée de son fonctionnement:la source
Bien que le PO ait spécifiquement mentionné la possibilité de voir comment la commande "cp" progresse, il faut dire que d'autres utilitaires sont meilleurs pour ce problème particulier.
Par exemple:
affichera la progression de la copie du fichier / dossier FROM dans le fichier / dossier TO.
Et rsync vous dira combien il est copié (et le taux de transfert) en cours de route. Cela fonctionne pour des fichiers simples ou des dossiers à la fois sur le même ordinateur ou sur le réseau.
la source
rsync
.Ce que vous pouvez faire est de vérifier les fichiers à la destination.
Si vos commandes cp ressemblent à quelque chose du genre,
cp -a <my_source> <my_dest_folder>
je vérifierais quels fichiers sont déjà copiés<my_dest_folder>
et quelle est la taille de chaque fichier, afin que je puisse voir la progression. Si le<my_source>
est un peu complexe (plusieurs couches de répertoires), alors un petit script pourra vérifier le statut. Bien qu'un tel script puisse consommer un peu d'E / S qui ne serait alors pas utilisé par lecp
processus.la source
Cet outil est une commande utilitaire Linux qui recherche les commandes de base coreutils (cp, mv, jj, tar, gzip / gunzip, cat, etc.) en cours d'exécution sur votre système et affiche le pourcentage de données copiées:
https://github.com/Xfennec/cv
la source
Je voudrais ajouter
cpv
, un peu de wrapper pour cepv
que j’ai écrit qui imite l’utilisation decp
.Simple et utile
Vous pouvez l'obtenir ici
la source
Vous pouvez également utiliser pipeviewer .
la source
Utiliser
pv -d
:( source )
Découvrez le PID de votre running
cp
(pidof cp
), disons que c'est 12345; alors simplementRemarques:
pv
tant que même utilisateur quecp
(ou en tant que root).cp
traitez actuellement de petits fichiers, vous ne verrez probablement pas tous ceux-ci dans la sortie (un petit fichier peut être fermé trop rapidement pourpv
pouvoir le récupérer). Pourtant, certains vont apparaître, vous pourrez donc même savoir ce qui secp
passe.pv -d "$(pidof cp)"
peut travailler; mais s'il y a plus d'un encp
cours d'exécution, cela ne fonctionnera pas. Il y en apidof -s
qui renvoie au plus un PID, mais vous ne pouvez pas être sûr qu'il appartiendra au boncp
processus s'il y en a plusieurs.la source
Vous pouvez envoyer un signal au processus:
Il est encore plus utile de créer un script qui interroge jusqu'à ce que vous appuyiez sur Ctrl-C ou que le processus soit terminé:
Fonctionne pour dd. Ça ne marche pas pour cp . Peut-être que vous devez utiliser un autre signal. J'ai déjà essayé SIGINFO, mais il ne semble plus exister sur la plate-forme Intel.
la source