Linux のプロセスについていくつか調べようとしていますが、いくつか質問がありますので、お答えいただければ幸いです。
この小さなプログラムを実行して、それがどのように機能するかを確認しました。
#!/bin/bash
count=1
while [ true ]
do
echo "Counter $count "
count=$(( $count + 1 ))
done
ただの無限ループです。
ここで、プログラムを実行top
してシェルでコマンドを使用すると、そのプロセスがより多くの 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
プログラムをしばらく実行させましたが、CPU 消費量が 85% を超えることはありません。なぜですか? それは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% のままなのはなぜですか? ゼロであってはいけませんか?
任意の支援をいただければ幸いです。
EDIT:メモリリーク用語の「混乱」については申し訳ありません。それでもなお、カウントは解放せずに多くのメモリを消費しているため、技術的にはメモリ リークではないでしょうか?