核心转储生成是原子操作吗?

den*_*nys 2 linux centos core-dump

我的意思是,如果我core.<pid>在文件系统中看到是否意味着核心文件生成完成,我可以自己使用它?

我的问题得到了解答。但我决定稍微解释一下。
我认为它core.<pid>首先在某些隐藏文件 fe 中生成,.code.<pid>~并且只有在生成完成后才移动(重命名)到目标路径。在这种情况下,操作可以是快速和原子的。

thr*_*rig 6

我不会赌它,尤其是在繁忙的多线程系统上,或者如果转储位置在网络共享上(值得一提的是,教授会生成 8 GB 的核心文件,这些文件必须通过 NFS 在 10Mbit 以太网上假脱机)。文件系统原子性通常需要锁定,或者写到临时文件然后再rename(1)把戏。fs/coredump.c对 linux 4.3.3 内核的一些研究表明没有这样的锁定或重命名技巧,因为内核会计算出要使用的文件名(具有取消链接的竞争条件!),然后假脱机输出文件:

        file_start_write(cprm.file);
        core_dumped = binfmt->core_dump(&cprm);
        file_end_write(cprm.file);
Run Code Online (Sandbox Code Playgroud)

由于可能没有巨大的内核锁来防止其他用户态的东西在上面运行时运行(这可以通过减慢大型核心文件的生成速度来测试,然后查看该系统的行为),我不没有看到有关此过程的任何原子性内容。