我有很多进程正在运行,我需要将它们全部杀死。
如何在不重新启动机器的情况下执行此操作?
答案1
更严肃一些,而不是激进一些杀'ing,您可以切换到维护模式(又名单用户):
# as root:
/sbin/init 1
您的系统将切换到运行级别1,致力于维护任务。 [几乎]所有进程都将[很好地]被终止,所有文件系统都将被卸载,交互式登录将定向到控制台(引导console
参数)。
稍后返回多用户运行级别:
/sbin/init 3
或者,启用图形登录管理器:
/sbin/init 5
答案2
你不可以做这个。无论你做什么,都必须有最后一个进程运行。或者更确切地说,当你能这样做,你会导致内核转储核心并出现恐慌。随后可能会立即重新启动 - 否则在重新启动机器之前什么也不会发生。
有内核空间,也有用户空间。用户空间从启动起就由 PID 1 - 支撑init
。杀全部进程的主要目的是杀死用户空间,那么你会用计算机做什么呢?
当系统启动时,系统的固件或某些中间引导加载程序会执行内存中的内核。内核会进行一些健全性检查并查找init
.如果它找到它并init
执行任何有用的操作,最终您将能够使用您的计算机。如果没有,您将无法使用您的计算机。
在该引导周期的剩余生命周期中,内核为用户空间(即init
的子空间)提供服务。把它们拿走,它就没有意义了。而且很可能惯于对此也感到高兴。
答案3
如果SysRq 魔法键在您的系统上启用,您可以按Alt+ Print Scrn/SysRq+E或执行
echo e > /proc/sysrq-trigger
将 SIGTERM 发送到除 init (PID 1) 之外的所有进程。
您还可以使用Alt+ Print Scrn/SysRq+I或
echo i > /proc/sysrq-trigger
改为发送 SIGKILL。
答案4
如果您的发行版使用systemd
,您可以切换到最小systemd
目标:
systemctl isolate emergency.target
这将杀死几乎所有应用程序,将您的系统移至单用户 root 登录模式。之后你执行:
systemctl isolate graphical.target
您将被带回 X。这几乎将完成重新启动。