Feststellen, ob eine Datei noch geschrieben wird
Moin, folgendes Problem: Irgendein Prozess, auf den ich keinerlei Einfluss habe, legt eine Datei in meinem System an. Das kann dauern, weil die Datei auch schon mal 50 MB groß sein kann. Nun möchte ich innerhalb eines C-Programms zuverlässig feststellen, wann der fremde Prozess fertig ist, da ich die Datei zur Weiterverarbeitung abholen muss. flock + Co. fallen aus - es existieren auf der Datei keine Sperren. lsof liest (so habe ich den Source interpretiert), die Prozesstabelle ein, um darüber das Ergebnis zu ermitteln. Gibt es denn keine einfachere Lösung? Workarounds wie das Überwachen der mtime oder der Dateigröße sind mir schon eingefallen, sind mir aber zu unsicher (die Datei kann auch über Netzwerk-Verbindungen reinkommen, und da ist mir der notwendige Timeout einfach zu groß). Ideen? Jan
Hello, On Wed, 01 Oct 2003, Jan Trippler wrote:
um darüber das Ergebnis zu ermitteln. Gibt es denn keine einfachere Lösung?
/proc/`pidof schreibprozess`/fd/* -dnh --
Was hattest du nochmal installiert? Nein, das ist kein Virus. Stimmt, denn ein Virus ist resourcenschonend programmiert, arbeitet schnell und tut zuverlässig, was er soll. Ganz im Gegensatz zu Erzeugnissen der Firma M$ [Roger Schwentker in dasr]
Am Mittwoch, 1. Oktober 2003 21:54 schrieb David Haller:
Hello,
On Wed, 01 Oct 2003, Jan Trippler wrote:
um darüber das Ergebnis zu ermitteln. Gibt es denn keine einfachere Lösung?
/proc/`pidof schreibprozess`/fd/*
Das klappt aber nur, wenn ich die PID des Prozesses kenne - was soll ich machen, wenn das z. B. einer von etlichen ftp-Prozessen ist? Gibt es keine Funktion zum Zugriff über den Dateinamen (oder meinetwegen der I-Node / Device) auf eine Liste offener Filedeskriptoren? Muss man da tatsächlich die ganze Prozesstabelle flöhen? Andere Frage dazu: Deine Variante geht doch IMHO nur unter Linux, oder? Ich muss kompatibel zu Solaris sein (da soll das auch funktionieren). Jan
Hallo, On Wed, 01 Oct 2003, Jan Trippler wrote:
Am Mittwoch, 1. Oktober 2003 21:54 schrieb David Haller:
On Wed, 01 Oct 2003, Jan Trippler wrote:
um darüber das Ergebnis zu ermitteln. Gibt es denn keine einfachere Lösung?
/proc/`pidof schreibprozess`/fd/*
Das klappt aber nur, wenn ich die PID des Prozesses kenne - was soll ich machen, wenn das z. B. einer von etlichen ftp-Prozessen ist?
Dat is doof. Aeh, man fuser + lsof?
Gibt es keine Funktion zum Zugriff über den Dateinamen (oder meinetwegen der I-Node / Device) auf eine Liste offener Filedeskriptoren? Muss man da tatsächlich die ganze Prozesstabelle flöhen?
Ich glaub schon. Schau dir mit lstrace [-S] evtl. an, was fuser/lsof machen.
Andere Frage dazu: Deine Variante geht doch IMHO nur unter Linux, oder?
pidof ja. Kannst dir aber ja anschauen, was das macht. -dnh -- 13. Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.'' --- Antoine de Saint-Exupéry as cited in Eric S. Raymond, "The Cathedral and the Bazaar"
participants (2)
-
David Haller
-
Jan.Trippler@t-online.de