还有其他的开发者以root身份login,我想把它踢出去。
所以我发了
pkill -KILL -u root
然后我意识到,我可能杀死了各种根进程。
我有损我的系统吗? 我现在无法通过SSH访问它。
更新:Web服务器仍在运行。 但是现在我无法通过SSH连接。 我不知道我做了什么。
一个简单的答案就是你杀了sshd(而且主知道还有什么),并且将无法使用SSH重新login系统。 除非你有其他方法来获得对系统的访问权限(例如远程控制台,IPMI等),否则您将需要重新启动系统以恢复SSH服务和其他服务。
希望你能够物理访问盒子,在这种情况下,你可能只需要打开电源button。 意识到你杀了很多进程,并为一些腐败做好准备。 Linux被devise为从系统崩溃中恢复,并且基本上引发了“手动”崩溃。 大多数事情应该在重新启动后恢复正常。 您可能在日志文件中有各种有趣的错误消息。
很长的回答:
这是一个伟大的思想实验和一个很好的面试问题。 “如果你做了X,会发生什么……”在自己的私人虚拟机上尝试这种做法是件有趣的事情,但绝对不能在真正的盒子上完成。 每个人都犯错误。 记住并学习你的错误。 犯错是最好的学习方式。 在生产上犯错误是一个痛苦的教训,偶尔会在你的职业生涯中发生。
pkill -KILL -u root
这个命令会向root拥有的所有进程发送'SIGKILL'(例如kill -9 -9。KILL是SIGKILL的别名)。 在一个系统上执行是非常糟糕的事情。 除了作为最后的手段之外,应该避免kill -9 。
你的命令积极地杀死了root所拥有的所有进程,进程立即死亡,没有机会清理。 为了弄清楚你所杀的是什么,请login一个健康的Linux系统,并使用类似下面的命令列出root所拥有的进程。 您通常不需要以root身份运行这些命令:
$ pgrep -u root -l $ ps aux | grep root
您可能已经杀死了产生新进程的Init(PID#1)。 您的系统可能无法创build新的进程。 所以,它现在可能会继续运作,但生病了,需要尽快修好。 随着时间的推移,系统会变得越来越不舒服。 你等待的时间越长,就会越糟糕。
更新:Web服务器仍在运行。 但是现在我无法通过SSH连接。 我不知道我做了什么。
我猜你正在使用Apache。 看来,networking服务器的子进程仍在运行,因为它们不是由用户“root”拥有的。 但是,父networking服务器进程通常由root拥有,并将其杀死。 结果,新的subprocess不会产生。 这可能会好一段时间,因为你可能有足够的subprocess来处理请求,通常这些subprocess将一直存在,直到它们被杀死或者崩溃。 再次,最快的解决办法是重新启动机器。
你很可能不得不重启你的系统,因为你已经杀死了几乎所有的关键服务。 你如何做到这一点取决于你有什么工具,或者你有什么交通工具到达数据中心。
系统正在运行,因为内核正在运行。 你不能访问sshd,因为你已经杀死了守护进程。 也许init也被终止,这意味着你不能创build新的进程。 所以,新的Apache连接可能无法build立(configuration参数应用;))。
你不能发送一个信号给内核线程,这就是为什么系统正在运行,但是根拥有的服务已经被终止,并且正常的复活,你应该重新启动它。