Linux是一个伟大而先进的操作系统,但它并不完美。有时,某些应用程序可能会开始表现不稳定并变得无响应或开始消耗大量系统资源。无响应的应用程序无法重新启动,因为原始应用程序进程永远不会完全关闭。唯一的解决方案是重新启动系统或终止应用程序进程。
有几个实用程序允许您终止错误的进程kill
最常用的。
kill
命令#
kill
是大多数 Bourne 派生 shell(例如 Bash 和 Zsh)中内置的 shell。 shell 和独立的命令行为略有不同/bin/kill
可执行的。
Use the type命令显示系统上包含的所有位置kill
:
type -a kill
kill is a shell builtin
kill is /bin/kill
上面的输出表明 shell 内置命令的优先级高于独立可执行文件,并且每当您键入时都会使用它kill
。如果您想使用二进制文件,请输入文件的完整路径/bin/kill
。在本文中,我们将使用内置的 Bash。
的语法kill
命令采用以下形式:
The kill
命令向指定的进程或进程组发送信号,使它们根据信号采取行动。当未指定信号时,默认为-15
(-学期)。
最常用的信号是:
-
1
(HUP
) - 重新加载进程。
-
9
(KILL
) - 杀死一个进程。
-
15
(TERM
) - 优雅地停止进程。
要获取所有可用信号的列表,请使用以下命令调用该命令-l
option:
kill -l
信号可以通过三种不同的方式指定:
- 使用数字(例如,
-1
or -s 1
).
- 使用“SIG”前缀(例如,
-SIGHUP
or -s SIGHUP
).
- 没有“SIG”前缀(例如,
-HUP
or -s HUP
).
以下命令彼此等效:
kill -1 PID_NUMBER
kill -SIGHUP PID_NUMBER
kill -HUP PID_NUMBER
PID 提供给kill
命令可以是以下之一:
- If
PID
大于零,信号被发送到 ID 等于PID
.
- If
PID
等于0,信号被发送到当前进程组中的所有进程。换句话说,信号被发送到属于调用该命令的 shell 的 GID 的所有进程。kill
命令。使用ps -efj
命令查看进程组 ID (GID)。
- If
PID
等于-1
,信号被发送到与调用该命令的用户具有相同 UID 的所有进程。如果调用用户是 root,则该信号将发送到除 init 和kill
过程本身。
- If
PID
小于-1
,信号被发送到进程组eq中的所有进程,其GID等于PID
.
普通用户可以向自己的进程发送信号,但不能向其他用户的进程发送信号,而 root 用户可以向其他用户的进程发送信号。
使用终止进程kill
命令#
终止或杀死一个进程与kill
命令,首先您需要找到进程ID号(PID)。您可以使用不同的命令来执行此操作,例如top
, ps
, pidof
and pgrep
.
假设 Firefox 浏览器没有响应,您需要终止 Firefox 进程。要查找浏览器 PID,请使用pidof命令:
pidof firefox
该命令将打印所有 Firefox 进程的 ID:
6263 6199 6142 6076
一旦您知道了进程号,您就可以通过发送以下命令来杀死所有进程TERM
signal:
kill -9 6263 6199 6142 6076
您可以将上述命令合并为一个,而不是搜索 PID 然后终止进程:
kill -9 $(pidof firefox)
使用以下命令重新加载进程kill
命令#
另一个常见用例kill
是发送HUP
信号,告诉进程重新加载其设置。
例如,要重新加载 Nginx,您需要向主进程发送信号。 Nginx主进程的进程ID可以在nginx.pid
文件,通常位于/var/run
目录。
Use the cat查找主PID的命令:
cat /var/run/nginx.pid
30251
找到主 PID 后,通过键入以下命令重新加载 Nginx 设置:
sudo kill -1 30251
上面的命令必须以 root 或用户身份运行sudo特权。
结论#
The kill
命令用于向进程发送信号。最常用的信号是SIGKILL
or -9
,它终止给定的进程。
如果您有任何问题或反馈,请随时发表评论。