Wenn ich einen Pipe-Befehl wie
cat myfile | processor_application
Ist es möglich zu sehen, wie weit die Datei cat durchlaufen hat, wenn processor_application etwas von standard in liest, in Blöcken zu verarbeiten ist?
Möglicherweise mit lsof?
Vielen Dank!
Antworten:
Sie können dazu pv verwenden , z
pv file | processor_application
Da pv übergibt, ist es stdin direkt zu es stdout, das Sie Katze nicht benutzen müssen.
Bearbeiten Wenn Ihr Programm bereits ausgeführt wird, suchen Sie die PID des
cat
Prozesses und sehen Sie sich den Inhalt von an/proc/<PID>/io
was Ihnen sagt, wie viele Bytes es geschrieben hat - wchar.
quelle
Absolut! Pipe Viewer macht genau das. Fügen Sie es einfach in Ihre Pipeline ein:
Sie können
cat
im obigen Beispiel Folgendes optimieren :Dies hat den Vorteil, dass ein tatsächlicher Fortschrittsindikator bereitgestellt wird, da pv die Größe der Eingabe direkt bestimmen kann. Wenn Sie pv in der Mitte einer Pipeline verwenden, müssen Sie die Dateigröße selbst angeben, um einen genauen Fortschritt zu erzielen:
Weitere Optionen zum Anpassen von pv finden Sie auf der Website.
quelle
pv
wenn es verfügbar ist :-)pv
in eine Pipeline mitmkfifo
und ist relativ einfachgdb
(vier Systemaufrufe mit GDBsp
).Wenn der Prozess bereits ausgeführt wird, enthält lsof eine
size/offset
Spalte, die für Sie hilfreich sein kann. Ermitteln Sie die PID des Cat-Prozesses, den Sie überprüfen möchten, und klicken Sie dann auf OKlsof -o -p [PID]
.Wenn der Prozess noch nicht ausgeführt wird, ist dies,
pv
wie von anderen vorgeschlagen, eine gute Option (vorausgesetzt, Ihr System verfügt über dieses Dienstprogramm).quelle
-o
es auf Ihrem System nicht funktioniert, sind Sie meiner Meinung nach ziemlich durchgeknallt in Bezug auf die Verwendung vonlsof
: - / (Ich nehme an, Sie führen lsof als den Benutzer aus, der dencat
Prozess gestartet hat, oder als root?)