无法杀死/不可停止的普通用户进程,如何强制控制它?

无法杀死/不可停止的普通用户进程,如何强制控制它?

从我的一个脚本中,我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,例如htoptop“系统监视器”应用程序。
所以现在,机器的使用再次平稳,因为始终处于 100% 状态的单个进程使其间歇性地缓慢停止一秒钟。

不过,关于除了结束这一过程之外的其他方式的答案kill仍然会更好。

谢谢你所有的提示!

相关内容