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


9

我想踢出其他以root用户身份登录的开发人员。

所以我发出

pkill -KILL -u root

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

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

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


1
几乎可以肯定,您需要重新启动它。如果可以,请向其发送ACPI关机信号,而不仅仅是拔掉插头。
天鹰

1
Iain,IME并非完全正确。它们必须以root用户身份启动,以绑定到特权端口,但随后又启动了由非特权用户配置的所有进程的一堆进程,以进行特权分离。但是,在Apache的情况下,通常仍然只有一个root拥有的进程位于其中。但我同意您的看法,所有进行实际Web服务的过程都不是root拥有的。
MadHatter

5
犯错误是最好的学习方法。请不要仅仅因为有人犯了一个严重的错误就投票。这个问题是有争议的,但不应该结束。相反,我要求您更深入地了解问题背后的思想并作出解释:当我杀死所有根进程时会发生什么?为什么主持人还活着?为什么SSHD无法服务请求但Web服务器可以服务?Web服务器怎么可能还活着?对于这些问题,我们似乎没有一个很好的规范答案。答案可以提供有关Unix如何工作的有价值的解释。
Stefan Lasiewski 2013年

2
谢谢Stefan,因为他动用了头部和心脏,没有像其他许多人一样强迫性地单击向下投票按钮。如果没有人在Stackexchange网站上发布过关于他们的错误的问题,以免被投票否决,那么没有人会向他们学习。我正在帮助人们解决我的问题,因此不应为此受到惩罚。
Buttle Butkus

1
我赞成这个问题,因为它很有趣,没有冒犯。这就像在观看发短信时有人掉进洞里的视频一样。
UncaAlby

Answers:


15

一个快速的答案是,您杀死了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拥有,因此您将其杀死。结果,将不会产生新的子进程。暂时这会很好,因为您可能有足够的子进程来处理请求,并且通常这些子进程会一直存在,直到被杀死或崩溃为止。同样,最快的解决方法是重新启动计算机。


我没有身体接触,但我会解决的。看到Apache仍在工作,我感到非常惊讶。因此,该机器在没有root的情况下运行良好。附注:如果您否决了该问题,那么我已经改善了标题。
Buttle Butkus

1
@ButtleButkus我没有投票赞成这个问题。我开始回答这个问题,然后对为什么事情以他们的方式运作很感兴趣。
Stefan Lasiewski 2013年

1
Stefan,谢谢您的回答。这是我从一开始就提出的一个答案,因为它很有意义。我在大约10分钟内重新启动了系统,此后一切似乎运转良好。
Buttle Butkus

4

您很可能必须重新启动系统,因为您已经杀死了系统上的几乎所有关键服务。如何做取决于您拥有什么工具或到达数据中心的传输方式。


实际上,似乎我并没有杀死所有关键流程。否则,为什么网络服务器仍然可以提供完善的网页?
Buttle Butkus

@ButtleButkus:您的Web服务器将不会以root用户身份运行。
user9517 2013年

@lain如果什至没有一个“关键”服务被杀死,那么我认为那会使整个服务器宕机。似乎该命令实际上并没有杀死单个关键服务。但是,它确实杀死了一种便捷的服务:sshd。
Buttle Butkus

2
仅仅因为一项关键服务被终止,并不意味着机器会立即停机。例如,我认为风扇控制守护进程很关键–当CPU使用率上升时,我希望风扇旋转得更多。我可能会终止该服务,并且几天之内的CPU使用率较低,然后突然有1000人访问我的网站,我的CPU着火了。还有很多其他不太明显的破坏方式……
锤碎2013年

3

系统正在运行,因为内核正在运行。您无法访问sshd,因为您已经杀死了守护程序。可能init也已终止,这意味着您无法创建新进程。因此,可能无法建立新的Apache连接(已应用配置参数;))。

您无法向内核线程发送信号,这就是为什么系统正在运行,但根拥有的服务已终止,并且为了正常复活,您应该重新启动它。


感谢您提供有趣的细节。我给了你一个赞,但我给了史蒂芬打勾号。
Buttle Butkus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.