我正在尝试了解有关 Linux 中进程的一些事情,并且我有一些问题希望您能为我解答。
我做了这个小程序来看看它是如何工作的:
#!/bin/bash
count=1
while [ true ]
do
echo "Counter $count "
count=$(( $count + 1 ))
done
只是一个无限循环。
现在,当我执行程序并top
在 shell 中使用命令时,该进程是消耗更多 CPU 资源的进程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4037 lola 20 0 16880 1248 1028 R 80 0.0 0:33.42 memoryleak.sh
我让程序运行了一段时间,但是从来没有超过85%的CPU消耗,这是为什么呢?我猜这是 OP 的卫生机制,但是,如果是真的,这是要决定的参数。更重要的是,计数器仍在工作,而且,就我所见,仍然可以无限工作。为什么 CPU 密集型程序不会使 CPU 崩溃?
现在,如果我中断该过程 - 发送一个STOP信号 - 并做一个ps aux
我得到:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
lola 3896 24.4 0.0 16880 1248 pts/3 T 09:15 0:37 /bin/bash ./cpukilla.sh
为什么进程停止后,CPU消耗还是24%?不应该是零吗?
任何援助将不胜感激。
编辑:好吧,对不起内存泄漏术语的“混乱”。无论如何,从技术上讲,这不会是内存泄漏,因为计数会消耗大量内存而不释放它?