当您杀死所有 root 进程时,它对服务器有什么影响?

But*_*kus 11 linux kill

还有其他开发人员以 root 身份登录,我想踢出去。

所以我发出

pkill -KILL -u root
Run Code Online (Sandbox Code Playgroud)

然后我意识到我可能杀死了各种root进程。

我是否损坏了我的系统?我现在无法通过 SSH 访问它。

更新:Web 服务器仍在运行。但是我现在无法通过 SSH 连接。我不知道我做了什么。

Ste*_*ski 16

一个快速的答案是你杀死了 sshd(上帝知道还有什么)并且将无法使用 SSH 重新登录到系统。除非您有其他方法可以访问系统(例如远程控制台、IPMI 等),否则您将需要重新启动系统,这将恢复 SSH 服务和其他服务。

希望您可以物理访问该盒子,在这种情况下,您可能只需要按下电源按钮即可。意识到您杀死了许多进程并为某些损​​坏做好了准备。Linux 旨在从系统崩溃中恢复,而您实际上触发了“手动”崩溃。大多数事情在重新启动后应该会恢复正常。您可能在日志文件中有各种有趣的错误消息。


长答案:

这是一个很好的思想实验,也是一个很好的工作面试问题。“如果你做了 X 会发生什么……” 在你自己的私人虚拟机上尝试是一件很有趣的事情,但绝不应该在真正的机器上完成。每个人都会犯错。记住并从错误中吸取教训。犯错是最好的学习方式。在生产中犯错是一个痛苦的教训,在你的职业生涯中偶尔会发生。

pkill -KILL -u 根

该命令将向kill -9root 拥有的所有进程发送一个“SIGKILL”(例如,KILL 是 SIGKILL 的别名)。在系统上做是一件非常糟糕的事情。kill -9应该避免,除非作为最后的手段。

您的命令积极地杀死了 root 拥有的所有进程,这些进程立即被杀死并且没有机会进行清理。要了解您杀死的内容,请登录一个健康的 Linux 机器并使用其中一个命令列出 root 拥有的进程。您通常不需要成为 root 用户即可运行这些命令:

$ pgrep -u root -l
$ ps aux | grep root
Run Code Online (Sandbox Code Playgroud)

您可能已经终止了产生新进程的 Init (PID #1)。您的系统可能无法创建新进程。因此,它现在可能会继续运行,但生病了,需要尽快修复。随着时间的推移,系统会越来越生病。你等待的时间越长,情况就会变得越糟。

更新:Web 服务器仍在运行。但是我现在无法通过 SSH 连接。我不知道我做了什么。

我猜你正在使用 Apache。网络服务器的进程似乎仍在运行,因为它们不归用户“root”所有。但是,父 Web 服务器进程通常由 root 拥有,而您将其杀死。因此,不会产生新的子进程。这暂时没问题,因为您可能有足够的子进程来处理请求,通常这些子进程会一直存在,直到它们被杀死或崩溃。同样,最快的解决方法是重新启动机器。


use*_*517 5

您很可能必须重新启动系统,因为您几乎杀死了系统上的所有关键服务。您如何做到这一点取决于您拥有哪些工具或您必须通过何种交通工具到达数据中心。

  • 仅仅因为关键服务被终止,并不意味着机器会立即停机。例如,我认为我的风扇控制守护进程很重要——当 CPU 使用率上升时,我希望风扇旋转得更多。我可以终止服务并且 CPU 使用率低了好几天,然后突然有 1000 人访问我的网站,我的 CPU 着火了。还有很多不那么明显的伤害方式…… (3认同)