核心转储时linux进程的状态

时间:2015-02-06 08:06:33

标签: linux process coredump

让我们说我有一个进程,如果它以某种方式崩溃(例如mysql)将产生一个巨大的核心文件。我想知道核心转储时进程的状态是什么。是以前还是改为僵尸?

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

1 个答案:

答案 0 :(得分:2)

如果您的监视器正在使用fork启动进程,则应该能够获得SIGCHLD信号,然后调用waitpid(2)。 AFAIK waitpid将告诉您core转储何时完成(并且在此之前未成功返回)

另请阅读core(5)

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

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

BTW,在核心转储的同时,我认为过程状态(在/proc/$PID/stat的3 rd 字段中报告通过proc(5)

       D  Waiting in uninterruptible disk sleep

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

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

当然您也可以stat(2) core文件。

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