Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内核转储时linux进程的状态_Linux_Process_Coredump - Fatal编程技术网

内核转储时linux进程的状态

内核转储时linux进程的状态,linux,process,coredump,Linux,Process,Coredump,假设我有一个进程,如果它以某种方式崩溃,它将生成一个巨大的核心文件(例如mysql)。我想知道当这个过程进行核心转储时,它的状态是什么。是和以前一样还是变成僵尸了 我现实生活中的问题是这样的: 我有一个监视器来检查进程的状态。一旦它意识到流程崩溃(通过监视流程的状态),它就会做一些事情。我想确保监视器只有在堆芯转储完成后才能执行某些操作。这就是为什么我想知道堆芯转储时的进程状态。如果您的监视器使用fork启动进程,它应该能够获得SIGCHLD信号,然后调用。AFAIKwaitpid将在core转

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

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

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

同时阅读

也许在包含
核心
转储的目录中使用工具会有所帮助

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

顺便说一句,当堆芯倾倒时,我相信过程状态(通过
/proc/$PID/stat
的第三个字段报告)是

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

最后,核心转储通常是很快的(除非你运行在一台有TB内存的超级计算机上)(在Linux上,有一个很好的文件系统,如Ext4或BTRFS),因为我相信(如果你有足够的内存)核心转储文件会保留在内存中。在上个世纪,在当时的超级计算机(Cray)上,持续半小时的内核转储是很常见的

当然,您也可以使用
core
文件


另请参见

当堆芯被转储时,进程是否真的会终止?监视器会怎么做?它是用
fork
启动进程的吗?@JoachimPileborg假设核心转储需要10分钟,并且在执行此操作时将其状态更改为一些不好的状态。然后,我的监视器可能会认为进程崩溃,并开始对核心文件进行tar。这很简单:如果状态更改为“正在进行核心转储”(我不知道这是否是真实状态),那么您将继续监视进程,当进程终止时,您就知道核心转储已完成。@basilestrynkevitch我认为是这样。我用python编写了它,并使用psutil创建了一个进程。我想它是用叉子的。监视器是一个线程,它使用psutil中的一些库来检查进程的状态。对不起,我认为我没有很好地解释这个问题。监视器不会分叉进程。它只是一个线程,用于检查我感兴趣的进程的状态(但该线程属于该进程的父进程)。看起来您可能对systemd感兴趣(但我不知道详细信息)
       D  Waiting in uninterruptible disk sleep