作为 Linux 系统管理员,很多时候会遇到Linux进程无响应或消耗太多资源,则可能需要终止它。大多数进程都有自己的关闭方法。不幸的是,进程可能会出现故障,不允许自己关闭。如果正在运行的后台进程无响应,则需要使用命令将其终止。
在 Linux 中可以杀死哪些进程?
在终止或杀掉进程之前,首先得考虑权限。root 用户可以终止所有进程。或者在不是root用户登录的情况下通过在命令之前添加 sudo 以将其作为 root 运行,也可以使用 su 获取根 shell,然后执行该命令。
终止进程会向给定进程发送终止消息。有多种类型的终止消息,包括:
- SIGKILL – SIGKILL 是杀死过程的终极方式。它总是会杀死一个进程,并且会突然杀死该进程,从而产生致命错误。SIGKILL应该总是有效的。如果它不起作用,则操作系统已出现故障。
- SIGTERM – SIGTERM 试图终止进程,但与 SIGKILL 不同的是,它可能会被阻止或以其他方式处理。可以将其视为尝试终止进程的更优雅的方式。
对于大多数目的,SIGKILL将是终止该过程的最快,最有效的方法。
1,查看运行的进程
top 命令是全面了解当前正在运行的进程的最简单方法。要查看当前正在运行的所有进程的列表,请使用以下命令:
[root@sharplee ~]# top

上面可以查看当前运行靠前的进程,如果想杀掉某个进程,直接在当前查看下按住K键,输入进程号,回车即可即可杀掉进程。接着退出按q键。

2,定位要终止进程
在杀死进程之前,可以通过很多种方法来定位进程。有多种方法可以在 Linux 中搜索进程。进程可以通过进程名称(或部分进程名称)或进程 ID(也称为“pid”)进行定位。
(1),通过ps命令来定位进程。
ps 命令显示与 top 类似的信息,但它不会以接口的形式显示。相反,ps 命令提供了正在运行的进程的完整列表,并根据选项来进行格式化。
[root@sharplee ~]# ps -aux

(2),发现进程id通过pgrep或者pidof命令
Linux命令 pgrep 是查找进程的一种更复杂的方法。此命令将返回基于特定选择条件(称为模式)的进程。该模式是一个正则表达式,例如 a*,其中 * 将是通配符。例如查找docker进程。
[root@sharplee ~]# pgrep docker

以下是pgrep命令的一些使用选项:
-l.列出进程名称和 PID。
-n.返回最新的进程。
-o.返回最旧的进程。
-u.仅查找属于特定用户的进程。
-x.仅查找与给定模式完全匹配的进程。
命令 pgrep -u root 显示 root 拥有的所有进程。命令 pgrep -u 根 ‘a*’ 返回 root 拥有的以字母 “a” 开头的进程。
pidof 命令用于查找进程的 ID,前提是您知道进程的名称。
[root@sharplee ~]# pidof docker

pidof可以使用以下选项:
-c.仅返回单个根目录中的 PID。
-o.省略某些 PID(包括在标志后要省略的进程)。
-s.仅返回单个PID。
-x.还返回正在运行脚本的shell的PID。
3,通过kill命令终止进程
在 Linux 中,有几种不同的终止进程的方法,具体取决于您是否知道正在运行的进程的名称、进程的 pid,或者知道进程运行了多长时间。
killall命令:killall 命令用于按名称终止进程。默认情况下,它将发送 SIGTERM 信号。killall 命令可以使用单个命令终止多个进程。如果提示not found,执行yum install psmisc。
[root@sharplee ~]#killall nginx

killall有以下选项可以使用:
-e.查找进程名称的完全匹配项。
-I. 尝试查找进程名称时忽略大小写。
-一.在终止进程时要求其他确认。
-u.仅终止特定用户拥有的进程。
-v.报告进程是否已成功终止。
除了基于名称终止进程外,killall命令还可以使用基于进程的期限进行终止,使用以下命令:
-o.使用此具有持续时间的标志可以终止运行时间超过该时间量的所有进程。
-y.使用此具有持续时间的标志可以终止运行时间少于该时间量的所有进程。
killall -o 15m 命令将终止所有早于 15 分钟的进程,而 killall -y 15m 命令将终止所有小于 15 分钟的进程.
pkill命令:pkill 命令类似于 pgrep 命令,因为它除了其他限定因素外,还会根据进程名称终止进程。默认情况下,pkill 将发送 SIGTERM 信号。
[root@sharplee ~]# pkill nginx

pkill命令的选项包括:
-n.仅终止发现的最新进程。
-o.仅杀死发现的最古老的进程。
-u.仅终止所选用户拥有的进程。
-x.仅终止与模式完全匹配的进程。
–signal.
向进程发送特定信号,而不是 SIGTERM。
kill 命令:kill 命令将使用给定的进程ID一次终止一个进程。它将向进程发送一个SIGTERM信号,指示要停止。它等待程序运行其关机例程。-signal 命令可用于指定不是 SIGTERM 的信号.
[root@sharplee ~]# kill 6677

kill -9 名令:kill -9 是一个有用的命令,当你需要关闭一个无响应的服务。以类似于常规 kill 命令的方式运行它。
[root@sharplee ~]# kill -9 6864

kill -9 命令向服务发送 SIGKILL 信号,指示立即关闭。无响应的程序将忽略kill命令,但每当发出 kill -9命令时,它将关闭。请谨慎使用此命令。它绕过标准关机例程,因此任何未保存的数据都将丢失。
如果 SIGKILL 信号未关闭服务,则操作系统将无法正常运行。
总结:当无法以任何其他方式关闭进程时,可以通过命令行手动终止该进程。要在 Linux 中终止进程,必须首先找到该进程。可以使用 top、ps、pidof 或 pgrep 命令来查找。一旦找到了想要终止的进程,可以用killall,pkill,kill,top命令杀死它。杀死进程时,可以发送 SIGHUP、SIGKILL 或 SIGTERM 的终止信号。需要具有终止进程的权限,这可以通过使用 sudo 命令获得。
转载请注明:XAMPP中文组官网 » Linux如何杀死进程?