Linux中的Kill命令

评论 0 浏览 0 2019-12-03

Linux是一个伟大而先进的操作系统,但它并不完美。偶尔,某些应用程序可能会开始表现不稳定并变得无响应或开始消耗大量系统资源。没有反应的应用程序不能被重新启动,因为原来的应用程序进程从未完全关闭。唯一的解决办法是重新启动系统或终止应用程序进程。

有几个工具可以让你终止错误的进程,其中kill是最常用的工具。

kill命令

kill是大多数Bourne派生的shell中的一个内置程序,如Bash和Zsh。命令行为在shell和独立的/bin/kill可执行文件之间略有不同。

使用type命令来显示你的系统中所有包含kill的位置:

type -a kill

输出

kill is a shell builtin
kill is /bin/kill

上面的输出告诉我们,shell内置程序比独立的可执行文件有优先权,只要你输入kill就会使用它。如果你想使用二进制文件,请输入文件的完整路径/bin/kill。在本文中,我们将使用Bash内置程序。

kill命令的语法有如下形式:

kill [OPTIONS] [PID]...

kill命令向指定的进程或进程组发送一个信号,使它们根据该信号采取行动。当没有指定信号时,它默认为-15(-TERM)。

最常使用的信号是::

  • 1 (HUP) - 重新加载一个进程。
  • 9 (KILL) - 杀死一个进程。
  • 15 (TERM) - 优雅地停止一个进程。

要获得所有可用信号的列表,请用-l选项调用该命令:

kill -l

信号可以用三种不同的方式来指定:

  1. 使用数字(如:-1-s 1)。
  2. 使用 "SIG "前缀(例如,-SIGHUP-s SIGHUP)。
  3. 不含 "SIG "前缀(例如,-HUP-s HUP)。

下面的命令相互之间是等价的:

kill -1 PID_NUMBER
kill -SIGHUP PID_NUMBER
kill -HUP PID_NUMBER

提供给kill命令的PID可以是以下的一种:

  • 如果PID大于0,信号将被发送到ID等于PID的进程中。
  • 如果PID等于0,信号将被发送到当前进程组的所有进程。换句话说,信号被发送到属于调用kill命令的shell的GID的所有进程。使用ps -efj命令可以查看进程组ID(GID)。
  • 如果PID等于-1,信号将被发送到与调用命令的用户具有相同UID的所有进程。如果调用的用户是root,信号将被发送到所有进程,除了init和kill进程本身。
  • 如果PID小于-1,该信号将被发送到进程组eq中的所有进程,其GID等于PID的绝对值。

普通用户可以向自己的进程发送信号,但不能向属于其他用户的进程发送信号,而根用户则可以向其他用户的进程发送信号。

使用kill命令终止进程

要用kill命令终止或杀死一个进程,首先你需要找到进程的ID号(PID)。你可以用不同的命令来做,如toppspidofpgrep

假设Firefox浏览器变得没有反应,而你需要杀死Firefox进程。要找到浏览器的PID,请使用pidof命令:

pidof firefox

该命令将打印出所有Firefox进程的ID:

输出

6263 6199 6142 6076

一旦你知道了这些进程的编号,你就可以通过发送TERM信号来杀死所有的进程:

kill -9 6263 6199 6142 6076

与其搜索PID然后杀死进程,你可以将上述命令合二为一:

kill -9 $(pidof firefox)

使用kill命令的重新加载进程

kill的另一个常见的用例是发送HUP信号,它告诉进程重新加载其设置。

例如,为了重新加载Nginx,你需要向主进程发送一个信号。Nginx主进程的进程ID可以在nginx.pid文件中找到,该文件通常位于/var/run目录中。

使用cat命令来查找主PID:

cat /var/run/nginx.pid

输出

30251

一旦你找到了主PID,就可以通过键入来重新加载Nginx的设置:

sudo kill -1 30251

上述命令必须以根用户或具有sudo权限的用户的身份运行。

总结

kill命令是用来向进程发送信号的。最经常使用的信号是SIGKILL-9,它可以终止指定的进程。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-10-15
0 个评论
标签