【发布时间】:2010-02-08 02:25:51
【问题描述】:
我正在使用strace/ltrace 监视一个进程,希望找到并拦截一个检查并可能激活某种全局共享锁的调用。
虽然我之前在 Linux 上处理并阅读过几种形式的进程间锁定,但我对调用要查找的内容一无所知。
目前我唯一的嫌疑人是futex(),它在流程执行的早期就出现了。
更新0
我对我所追求的有些困惑。我正在监控现有进程以调用持久的进程间内存或等效。我想知道要查找的系统和库调用。我无意自己调用这些,所以自然会出现futex(),我相信很多库都会在这方面实现它们的锁定调用,等等。
更新1
我想要一个函数名称列表或文档链接,我应该在ltrace 和strace 级别进行监控(并指定哪个)。任何其他关于如何跟踪和定位全局锁的好建议都会很棒。
【问题讨论】:
-
您可以监控
futex和semop。有时pipe可用于进程的锁定和排序。基于共享内存的原子操作同步不使用任何系统调用。 -
@osgx:你能描述一下这些原子操作吗?
-
我错了。不仅是原子的,而且对共享内存的顺序读/写都可以用于同步。所以你不能用 ltrace/strace 监控原子和读/写。即使 futex 也不会每次都进行系统调用。 atomic:最简单的方法是 pthread_spinlock,和gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html 但是 gcc atomics 是内联的
-
为什么我不能开始赏金?
标签: linux locking interprocess strace ltrace