私のスクリプトの1つで、通常のfind
ユーザー(rootではない)としてコマンドを呼び出しました。
戻り/続行されていないためスクリプトを終了しましたが、find
まだ実行中です。
私はhtop
いつも1つのコアを100%使用することがわかりました(ここでは4つのコア)。
ちなみに、100%のコアは随時変更されます。
htop では、ステータスは「R」(実行中)であり、以下の終了信号以降は変更されません。
私はSIGKILL、SIGSTOP、SIGTERM、SIGABRT、hup、15を試しましたが、そのうち何も機能しません。
使用されませんsudo
。
また、すべての可能な終了信号を試しました。
astr=(`kill -l |grep "..[)]" -o |tr -d ')'`)
for str in "${astr[@]}"; do echo "======== $str";kill -$str 2315444;ps -o pid,stat,status,state,pcpu,cmd -p 2315444;sleep 1;done
しかし、毎回結果は常に同じです。
PID STAT STATUS S %CPU CMD
2315444 RN - R 99.5 find
apparmor
実行中ですがfind
リストされていません(以降調査する)、停止しても動作しません。 SELinuxはまだ実行されておらず、LSMを確認する方法が見つかりませんでした。
考えるこれ実行していたパーティションを強制的にマウント解除してみましたが(問題は発生しません)、そうした後もfind
まだ実行中です。
再起動以外に何を試すことができますか?
dmesgにも特別なことはありません。
ハードウェアエラーかもしれませんか?それともカーネルのバグですか?
他のプロセスでもこれが起こる可能性があると思いますが、わかりません。たぶん、ハードディスクIOプロセスに関連していますか?
オペレーティングシステム:Ubuntu 16.04
答え1
以下を使用すると、再起動を回避できます。
sudo cgcreate -g cpu:/cpulimited
sudo cgclassify -g cpu:cpulimited 2315444 #the `find` pid
cd /sys/fs/cgroup/cpu/cpulimited
echo 1000000 |sudo tee cpu.cfs_period_us
echo 1000 |sudo tee cpu.cfs_quota_us #cant be less than 1000 as I tested
cpu.cfs_quota_usの完全な説明を読んでください。ここよって、ヒント
cgroup魔法はこのように殺すことができないプロセスで動作します!
pcpuは98%で表示されますが、ps
他のすべてのシステムモニタでは、これらのプロセスはCPUをほとんど使用しないと表示されます(たとえば、htop
「top
システムモニタ」アプリケーション)。
常に100%の単一プロセスが間欠的に1秒間遅くなるため、マシンの使用が再びスムーズになりました。
それでもプロセスを終了することに加えて、他の方法に答える方がkill
良いでしょう。
すべてのヒントに感謝!