Załóżmy, że mamy duży plik "plik". Uruchomiliśmy jego kompresję wymagającym kompresorem, np. lzma -9 plik i czekamy, czekamy... W jaki sposób można sprawdzić postęp i dowiedzieć się, kiedy mniej więcej kompresja się skończy?
Załóżmy, że mamy duży plik "plik". Uruchomiliśmy jego kompresję wymagającym kompresorem, np. lzma -9 plik i czekamy, czekamy... W jaki sposób można sprawdzić postęp i dowiedzieć się, kiedy mniej więcej kompresja się skończy?
Znając PID, procesu możemy zobaczyć otwarte pliki w katalogu /proc/<pid>/fd oraz informacje o nich w katalogu /proc/<pid>/fdinfo/. Znajdziemy tam m.in. nasz plik, który jest odczytywany.
Teraz wystarczy porównać miejsce w pliku, na jakim jest obecnie odczyt z wielkością całego pliku, by zobacyczyć ile procent danych już zostało odczytanych.
Do śledzenia na bieżąco napisałem sobie prosty skrypcik: jako pierwszy parametr podajemy PID procesu, który odczytuje plik, jako drugi - numer deskryptora czytanego pliku (do sprawdzenia przez ls -l /proc/<pid>/fd/):
#!/usr/bin/python import os.path import sys import time try: pid=int(sys.argv[1]) fd=int(sys.argv[2]) pathfdinfo="/proc/%d/fdinfo/%d" % (pid,fd) pathfd="/proc/%d/fd/%d" % (pid,fd) except: print "bledne dane pid: %d fd: %d" % (pid,fd) sys.exit(1) current=0 while(1): try: fdinfo=open(pathfdinfo,'r') except: print "Blad otwarcia pliku %s" % (path,) last=current current=int(fdinfo.readline().split("\t")[1]) fsize=os.path.getsize(pathfd) print current,fsize,100.0 * current/fsize,"ETA:", 10.0 * (fsize-current) / (current-last) time.sleep(10) fdinfo.close()