我正在尝试编写一个 zsh 脚本来检测并杀死 forkbomb。我知道防止这种情况的最简单方法是在 limits.conf 文件中设置限制,但此分配需要自动检测和缓解解决方案。我对脚本编写不是很熟悉,尤其是 zsh,所以我不确定是否存在逻辑错误或语法错误。
我的 bombDestroyer.zsh 文件:
#!/bin/zsh
#
ulimit -u 20 #limit user process to 20
#Kill any process that exceeds the limit except for root
if [[ $(ulimit -u) -eq 20 ]]; then
if [[ $(whoami) != "root" ]]; then
echo "Fork bomb detected. Killing user's processes"
killall -u $(whoami)
fi
else
echo "No fork bomb detected"
exit 1
fi
我使用
chmod +x bombDestroyer.zsh
命令使其可执行,但是当我使用 sudo ./bombDestroyer
运行它时,没有任何反应。没有打印回声语句,也没有进程被终止。
即使当炸弹正在执行并且用户有数百个进程时,zsh 脚本也不会终止进程。
当我在没有第二个 if 语句的情况下运行它时,它起作用了(杀死了所有根进程并因此关闭了 VM),所以我认为这是一个语法错误。