Frage

Ich bin Überwachung eines Prozesses mit strace / ltrace in der Hoffnung auf finden und Intercept ein Anruf, der überprüft, und aktiviert möglicherweise eine Art global gemeinsame Sperre.

Während ich mit habe behandelt und vor über verschiedene Formen der Interprozessverriegelung auf Linux lesen, ich bin eine leere Zeichnung auf, was Anrufe zu suchen.

Zur Zeit meine einzige Verdächtige ist futex(), die in dem Prozess Ausführung sehr früh kommt.

UPDATE0

Es gibt einige Verwirrung über das, was ich bin nach. Ich bin Überwachung ein bestehender Prozess für Anrufe in persistent Inter Speicher oder gleichwertig . Ich würde gerne wissen, was System und Bibliothek Anrufe zu suchen. Ich habe nicht die Absicht, diese selbst nennen, so natürlich futex() wird kommen, ich bin sicher, dass viele Bibliotheken ihre Sperren Anrufe in Bezug auf diese umzusetzen, etc.

Update1

würde ich eine Liste von Funktionsnamen oder der Nummer einen Link zur Dokumentation, dass ich bei den ltrace und strace Ebenen (und Angabe, welche) überwachen soll. Jede andere gute Ratschläge, wie die globale Sperre im Auge zu verfolgen und zu lokalisieren wäre toll.

War es hilfreich?

Lösung

Wenn Sie überwachten Prozess in valgrind starten können, dann gibt es zwei Projekte:

http://code.google.com/p/data -Rennen-Test / wiki / ThreadSanitizer

und Helgrind

http://valgrind.org/docs/manual/hg-manual.html

  

Helgrind kennt all die pthread   Abstraktionen und verfolgt ihre Auswirkungen   so genau wie möglich. Auf x86 und   amd64-Plattformen, es versteht und   teilweise Griffe implizite Sperr   die sich aus der Verwendung des LOCK   Befehlspräfix.

So können diese Tools erkennen selbst atomare Speicherzugriffe. Und sie werden pthread Nutzung überprüfen

Andere Tipps

Herd ist ein weiterer guter

  1. Es gibt viele Systemaufrufe zur Verriegelung verwendet werden. Herde, fcntl und sogar erstellen

  2. Wenn Sie pThreads / sem_ * Schlösser verwenden sie im User-Space ausgeführt werden können, so dass Sie nie sehen, wie sie in Strace als futex genannt wird nur für Operationen anhängig. Wie, wenn Sie tatsächlich müssen warten.

  3. Manche Vorgänge können im User-Space nur durchgeführt werden - wie spinlocks - Sie werden nie sehen es sei denn, sie einige wartet Timer tun -. Backoff, so dass Sie nur Sachen wie Nanosleep sehen kann, wenn eine Sperre für andere wartet

Es gibt also keine „generische“ Art und Weise ist, sie zu verfolgen.

auf Systemen mit glibc ~> = 2,5 (glibc + nptl) Sie können Mitbenützung Prozess

semaphores (last parameter to sem_init), more precisely, posix unnamed semaphores

posix mutexes (with PTHREAD_PROCESS_SHARED to pthread_mutexattr_setpshared)

posix named semaphores (got from sem_open/sem_unlink)

system v (sysv) semaphores: semget, semop

Auf älteren Systemen mit glibc 2.2, 2.3 mit linuxthreads- oder auf Embedded-Systemen mit uClibc können Sie nur System v verwenden (sysv) Semaphore für iterprocess Kommunikation.

UPD1. Jede IPC und socker muss geprüft werden,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top