La raison pour laquelle cela se produit de cette façon est que le programme dit "écrivez ces données" et que le noyau Linux les copie dans une mémoire tampon qui est mise en file d'attente pour aller sur le disque, puis dit "ok, c'est fait". Ainsi, le programme pense qu'il a tout copié. Ensuite, le programme ferme le fichier, mais soudain le noyau le fait attendre pendant que ce tampon est envoyé sur le disque.
Donc, malheureusement, le programme ne peut pas vous dire combien de temps il faudra pour vider le tampon car il ne le sait pas.
Si vous voulez essayer quelques astuces pour les utilisateurs expérimentés, vous pouvez réduire la taille du tampon utilisé par Linux en définissant le paramètre du noyau vm.dirty_bytes
à quelque chose comme 15000000
(15 Mo). Cela signifie que l'application ne peut pas obtenir plus de 15 Mo d'avance sur sa progression réelle. (Vous pouvez modifier les paramètres du noyau à la volée avec sudo sysctl vm.dirty_bytes=15000000
mais les faire rester lors d'un redémarrage nécessite de modifier un fichier de configuration comme /etc/sysctl.conf
qui peut être spécifique à votre distribution.)
Un effet secondaire est que votre ordinateur peut avoir un débit d'écriture de données inférieur avec ce paramètre, mais dans l'ensemble, je trouve utile de voir qu'un programme s'exécute longtemps alors qu'il écrit beaucoup de données par rapport à la confusion d'avoir un le programme semble avoir terminé son travail, mais le système est très en retard car le noyau fait le travail réel. Réglage dirty_bytes
à une valeur raisonnablement petite peut également aider à empêcher votre système de ne plus répondre lorsque vous manquez de mémoire libre et que vous exécutez un programme qui écrit soudainement beaucoup de données.
Mais ne le réglez pas trop petit ! J'utilise 15 Mo comme estimation approximative que le noyau peut vider la mémoire tampon d'un disque dur normal en 1/4 de seconde ou moins. Cela empêche mon système de se sentir "lent".