“strace”修复挂起的进程

use*_*305 6 unix process rhel strace

我有一个单线程 Unix 进程,它通过TCP与其他进程进行通信。

问题如下。当我启动该进程时,它会挂起(没有繁忙循环),直到我杀死它。

有趣的是,一旦我将strace附加到它,它就会继续以预期的行为运行,就好像根本没有任何问题一样(总是可重现)。

这种行为的原因可能是什么?strace对进程的状态有什么影响?


strace 改变行为的原因是,因为我们使用 openonload 有一个错误。一旦我们附加了 strace,堆栈就被移回内核,问题就消失了。

epx*_*epx 0

我只遇到过一次这个问题,它与信号处理有关。它是单线程代码中竞争条件的来源之一。