从我的一个脚本中,我find
以普通用户(不是 root)的身份调用了 command。
它没有返回/继续,所以我杀死了脚本并且find
仍在运行。
我htop
发现它总是 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 魔法对这种无法杀死的进程起作用!
尽管ps
显示 pcpu 为 98%,但所有其他系统监视器都显示此类进程几乎没有使用 cpu,例如htop
和top
“系统监视器”应用程序。
所以现在,机器的使用再次平稳,因为始终处于 100% 状态的单个进程使其间歇性地缓慢停止一秒钟。
不过,关于除了结束这一过程之外的其他方式的答案kill
仍然会更好。
谢谢你所有的提示!