我应该监控哪些进程间锁定调用?

时间:2010-02-08 02:25:52

标签: linux locking interprocess strace ltrace

我正在使用strace / ltrace监控流程,希望查找并拦截一个检查并可能激活某种全局共享锁的调用。

虽然之前我曾在Linux上处理和阅读过几种形式的进程间锁定,但我还是要查找要查找的内容。

目前我唯一的嫌疑人是futex(),它在执行过程中很早就出现了。

Update0

对于我所追求的事情存在一些困惑。我监控调用持久进程间内存或等效的现有进程。我想知道要查找的系统和库调用。我无意自称这些,所以很自然futex()会出现,我相信很多库会根据这个来实现锁定调用等。

UPDATE1

我想要一个功能名称列表或文档链接,我应该在ltracestrace级别监控(并指定哪个级别)。关于如何跟踪和定位全局锁定的任何其他好建议都会很棒。

4 个答案:

答案 0 :(得分:2)

flock是另一个好人

答案 1 :(得分:2)

如果您可以在valgrind中启动受监视的进程,那么有两个项目:

http://code.google.com/p/data-race-test/wiki/ThreadSanitizer

和Helgrind

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

  

Helgrind知道所有的pthread   抽象和跟踪他们的影响   尽可能准确。在x86和   amd64平台,它理解和   部分处理隐式锁定   因使用LOCK而产生   指令前缀。

因此,这些工具甚至可以检测原子内存访问。他们将检查pthread使用情况

答案 2 :(得分:0)

在glibc~> = 2.5(glibc + nptl)的系统上你可以使用进程共享

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

在使用glibc 2.2,2.3使用linuxthreads的旧系统上或在使用uClibc的嵌入式系统上,只能使用系统v(sysv)信号量进行iterprocess通信。

upd1:必须检查任何IPC和socker。

答案 3 :(得分:0)

  1. 有许多系统调用可用于锁定:flock,fcntl,甚至是create。

  2. 当您使用pthreads / sem_ *锁时,它们可能会在用户空间中执行,因此您永远不会 在strace中看到它们,因为只有挂起操作才会调用futex。就像你真的一样 需要等待。

  3. 有些操作只能在用户空间中完成 - 比如自旋锁 - 你永远不会看到它们 除非他们做一些等待计时器 - 退避,所以当一个锁等待其他时,你可能只会看到像nanosleep这样的东西。

  4. 因此没有“通用”方式来追踪它们。