$ ls bash: no more processes
呃哦。 看起来像有人做了一个叉子炸弹。 我曾经工作过的地方,这就意味着共享服务器需要重新启动,因为即使是使用root的系统pipe理员也无法清理问题。 通常,他们甚至不能得到提示。
我听到了一些技巧(特别是发送STOP信号而不是KILL信号,因为后者将允许剩下的线程立即replace被杀死的信号),但是我从来没有见过一个全面的指南,标题是“你有你自己”叉子炸弹?
让我们来做一个。
防止叉式炸弹使用ulimit以合理的每个用户进程限制消耗stream程限制。
这样,一个用户在达到系统限制之前就会耗尽他们的stream程配额。
首先要尝试的是获取login的用户登出。 有可能他们的shell可能是分支进程的父进程,并且可能会结束这个问题。
如果这不起作用,您可以尝试以root身份运行kill -STOP -2
以冻结除root以外的任何其他用户运行的所有进程。 如果这样的话,你可以使用kill -CONT <pid>
来解冻一些与叉炸弹无关的已知进程并杀死它们以消除整个进程表问题并给你一些喘息的空间来追踪并杀死原始源的问题。 Sendmail是杀死系统进程的一个很好的例子,因为通过使用.pid文件识别pid很容易识别。 例如, kill -CONT $(< /var/run/sendmail.pid); kill $(< /var/run/sendmail.pid)
kill -CONT $(< /var/run/sendmail.pid); kill $(< /var/run/sendmail.pid)
。
不知道你甚至可以发送一个停止信号,因为产卵kill
需要一个可用的进程句柄。 此外,根据我的经验,在耗尽stream程之前,系统已经变得超载和不可用。
您是否考虑过使用ulimit
来执行每个用户的进程限制? 这将阻止你的用户启动叉炸弹(意外或不)。
一些BSD系统有能力为root保留最后的5个进程。 也许你的系统有这个能力。