Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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_Memory_Memory Management_Process_Ram - Fatal编程技术网

Linux 在不使用内存的情况下,守护进程如何保持活动状态?

Linux 在不使用内存的情况下,守护进程如何保持活动状态?,linux,memory,memory-management,process,ram,Linux,Memory,Memory Management,Process,Ram,我在使用ps aux命令时提出了这个问题 在这里,我可以看到一些进程位于0%CPU 0%MEM 0 VSZ 0 RSS 如果守护进程没有使用任何内存,那么为什么以及如何显示它呢?我有点理解,0%的CPU使用率意味着进程当前未被使用,但0%的MEM不意味着根本没有进程吗 我想检查这是否是特定于系统守护进程的,所以我制作了一个带有无限循环的简单C程序,没有任何变量 void main() { while (1){} } 这一次,VSZ和RSS具有实际值,而MEM保持在0%。 这

我在使用
ps aux
命令时提出了这个问题

在这里,我可以看到一些进程位于0%CPU 0%MEM 0 VSZ 0 RSS

如果守护进程没有使用任何内存,那么为什么以及如何显示它呢?我有点理解,0%的CPU使用率意味着进程当前未被使用,但0%的MEM不意味着根本没有进程吗

我想检查这是否是特定于系统守护进程的,所以我制作了一个带有无限循环的简单C程序,没有任何变量

void main()
{
        while (1){}
}
这一次,VSZ和RSS具有实际值,而MEM保持在0%。


这里发生了什么?

%MEM
可能未在您的系统中完整记录。AIX手册关于
ps
命令说:

%MEM

计算为工作段数与代码之和 内存中的段页乘以4(即RSS值),除以 使用中的实际内存大小,以KB为单位,乘以100, 四舍五入至最接近的完整百分点。此值尝试 传递进程正在使用的实际内存的百分比。 不幸的是,与RSS一样,它往往会夸大流程的成本 即与其他进程共享程序文本。此外 四舍五入到最接近的百分点将导致所有进程 在系统中,RSS值小于实际内存大小的0.005倍 将%MEM设置为0.0

正如您可能通过检查输出而怀疑的那样,已经应用了一些舍入。因此,如果值太低,将打印%0.0

并且,这度量实际内存使用的百分比,这意味着它不反映进程的大小,而只反映进程的哪个部分实际映射到实际内存

在第一种情况下,CPU的%0.0只意味着进程存在,但实际上什么也不做,它可能处于等待状态(或消耗非常小的处理能力百分比),而不是“它当前未被使用”。在第二种情况下,您的进程是活动的,它实际上非常繁忙(这是
%97.7
反映的),但它所做的是愚蠢的(无限循环不做任何事情)


要理解所有这些,您可以阅读有关进程状态、进程调度和虚拟内存的内容。

虽然Jean Baptiste的回答就其本身而言是正确的,但我认为在这种情况下,更重要的是,您注意到的所有三个域进程中的所有0内存都是内核线程。它们的内存都是内核内存,不会显示在top或ps上。通过用括号封装的命令和VSZ列中不消耗内存的进程,可以看出它是linux上的内核线程。(这列基本上代表了所有可以被认为是进程内存的内容。对于内核线程,它只有0,这只是因为它们没有正确报告内存

还要注意的是,由于开始时间在2018年,并且消耗的时间不超过1分41秒,因此这些工作都不是很活跃