如何中止ubuntu服务器中卡住的命令?


Answers:


21

CTRL+C将发送SIGINT到应用程序。应用程序可以为此信号配置处理程序,也可以忽略该信号。默认情况下,没有处理程序,SIGINT它将终止该应用程序。

您可以使用CTRL+\哪个发送SIGQUIT。如果核心限制不为零,这也会生成核心转储。

您可以使用暂停进程并返回shell CTRL+Z,这将停止进程的执行并返回shell提示符。该进程将在内存中,并且可以在当前Shell中作为作业使用。然后,您可以使用kill -SIGNAL %%kill -SIGNAL %<job_ID>向该作业发送信号。例如杀死上一份工作kill -9 %%

如果它们都不起作用,您始终可以发送SIGTERM,作为最后的选择,SIGKILL它将终止任何进程。该信号与其他任何信号一样,必须以与您要停止的进程相同的用户身份或以root用户身份发送。要发送SIGKILL至进程,请先使用ps aux或来查找进程ps -edf,然后运行kill -SIGKILL <process_ID>,其中输出<process_ID>是其中的PIDps

如果进程处于不间断的调用中,则无法传递信号。不间断调用是无法停止的内核函数,通常是由于驱动程序错误(例如,驱动程序不是reentrant)而发生的。直到调用完成或服务器重新启动,才能停止处于不间断睡眠状态的进程。

如果某个进程成为僵尸,它将仅占用进程表中的空间而不会使用任何资源。僵尸进程无法接收信号。

当前架构的信号列表可以在下面找到 kill -l

见该男子页killpsbash。要查看手册页,请使用类似以下内容的内容:man ps


2

如果您拥有完整的控制台访问权限,则可以Alt- F1..12并获取一个新的控制台。

从那里,您可以执行如下流程清单:

ps aux | grep <process-name>

然后kill对进程ID执行:

kill -9 <pid>

如果您没有完全的控制台访问权限,只需打开另一个终端窗口(也许通过PuTTY或类似方法),然后执行上述过程列表并取消步骤。


1

Ctrl C将SIGINT发送到您正在运行的进程。如果您不想打开其他控制台,则可以使用Ctrl \发送SIGQUIT。这将解决SIGINT无法解决的大多数日常挂起的应用程序。

我个人想使用一种发送带有快捷方式的SIGKILL的方法,但是我不知道这样做的方法。


1

我认为pgrep并且pkillkill使用显式进程ID 更容易使用。

另外,不要从信号9(SIGKILL)开始,而应从默认SIGTERM(15)开始。这将使进程有机会正常终止(如果可以)。 pkill -15 thing并且pkill thing应该等效。

这是如何工作的。假设ntpd已挂起。

流程是什么?(如果您认为自己不会出现误报,则可以跳过技巧)。

$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd

终止进程:

$ pkill ntpd

pgrep再次使用以查看是否成功。

如果没有,请最终移至pkill -9


0

您将切换到新的终端,找到卡住进程的PID(使用ps),然后使用kill杀死进程。我会先使用kill (PID)。如果那行不通,我将使用kill -9 (PID)。如果这样不能停止进程,则需要重新启动计算机。


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.