服务器访问上升系统崩溃,当您杀死所有根进程时,它对服务器有什么影响?

一个快速的答案是,您杀死了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

您可能已经杀死了产生新进程的Init(PID#1)。您的系统可能无法创建新进程。因此,它可能暂时仍在运行,但病了,需要尽快修复。随着时间的流逝,该系统将越来越多。您等待的时间越长,效果就会越差。

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

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