終了/停止できない一般ユーザープロセスを強制的に制御する方法は何ですか?

終了/停止できない一般ユーザープロセスを強制的に制御する方法は何ですか?

私のスクリプトの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をほとんど使用しないと表示されます(たとえば、htoptopシステムモニタ」アプリケーション)。
常に100%の単一プロセスが間欠的に1秒間遅くなるため、マシンの使用が再びスムーズになりました。

それでもプロセスを終了することに加えて、他の方法に答える方がkill良いでしょう。

すべてのヒントに感謝!

おすすめ記事