gpt4 book ai didi

linux - 核心转储时linux进程的状态

转载 作者:太空狗 更新时间:2023-10-29 12:15:04 29 4
gpt4 key购买 nike

假设我有一个进程,如果它以某种方式崩溃(例如 mysql),它将生成一个巨大的核心文件。我想知道核心转储时进程的状态是什么。还是和以前一样还是变僵尸了?

我现实生活中的问题是这样的:我有一个监视器来检查进程的状态。一旦它意识到进程崩溃(通过监视进程的状态),它就会做一些事情。我想确保监视器只在核心转储完成后才做一些事情。这就是为什么我想知道内核转储时的进程状态。

最佳答案

如果您的监视器使用 fork 启动进程,它应该能够获得 SIGCHLD 信号,然后调用 waitpid(2) . AFAIK waitpid 会在core 转储完成时告诉您(在此之前不会成功返回)

另请阅读 core(5)

也许使用 inotify(7)包含 core 转储的目录上的设施可能会有所帮助。

systemd可能也相关(我不知道细节)

顺便说一句,在核心转储时,我相信进程状态(通过 /proc/$PID/stat 的第 3rd 字段中的 proc(5) 报告)是

       D  Waiting in uninterruptible disk sleep

因此,如果您担心较长的 core 转储时间,您可以例如每半秒循环一次到 fopen 然后是 fscanf 然后是 fclose /proc/$PID/stat 伪文件直到状态不再是D

最后,如今核心转储通常很快(除非您在具有 1 TB RAM 的 super 计算机上运行)(在具有良好文件系统(如 Ext4 或 BTRFS)的 Linux 上),因为我相信那(如果你有足够的 RAM)核心转储文件保留在 page cache 中.持续半小时的核心转储在上个世纪在当时的 super 计算机(Cray)上很常见。

当然你也可以stat(2) 核心文件。

另见 http://www.linuxatemyram.com/

关于linux - 核心转储时linux进程的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361156/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com