我有一个在RHEL6.x(64位)上运行的多线程进程。
我发现当我尝试启动进程时,进程会挂起并且某些线程(同一进程)会崩溃。有些线程等待线程之间的共享内存被创建(我可以看到所有这些都没有被创建)。
但是当我使用strace时,进程不会挂起并且它工作得很好(所有应该创建的内存都会被创建)。甚至在创建内存后中断strace,也可以保持进程正常运行。
我读过这个:
确实给了我一个主意。但我仍然不清楚这是因为他们使用的RHEL版本没有被提及。
另外,另一点是,将内核更改为fedora(兼容)内核不会产生问题。
所以,我想知道strace究竟是如何影响一个过程的? (或者它只是如链接中指出的那样移回内核的堆栈)?
答案 0 :(得分:1)
我还不能评论,但我在过去的工作中看到了类似的事情。由于没有给出确切的答案,我将继续这样做:
由于时间问题,你在线程之间进入死锁的几率是多少,这些问题得到了解决。通过strace减慢程序执行速度?
如果您通过流程调试而不是strace会发生什么?