【发布时间】:2015-09-08 15:15:47
【问题描述】:
我主要使用 strace 来找出进程似乎被挂起的原因,并且非常有效。但现在我用它来分析为什么 c 程序中的某些锁定似乎不起作用。当我在实际的问题程序上运行它时,我看到每个进程都使用 fcntl 锁定某个文件,该选项应该让后来的进程等待前一个进程解锁。 strace 似乎表明即使锁定到位,每个进程也会继续进行。
但是,我制作了自己的 c 程序来分叉 4 个进程,如果该进程是子进程,它会锁定 /tmp/test.txt,在其上附加几行,然后解锁文件。然后我用 strace 运行它,我看到的结果按照我认为不可能的顺序排列。同样,通过 strace,每个进程似乎都通过 fcntl 锁继续进行,即使另一个进程已经将其锁定。此外,每个进程似乎都会在该进程完成解锁后写入文件。
流程的运行方式似乎存在一定程度的复杂性,我无法找到相关文档。有人可以帮助我走上正轨吗?
顺便说一句,我检查了使用的 fcntl 命令,它们似乎是非常标准的用法,并且每个参数都与文档一起检查。我正在使用 Centos 6.6。
【问题讨论】:
标签: process linux-kernel strace fcntl